Erro com Update

olá galera, eu tenho duas tabelas, contatos e telefone, contatos com os seguintes atributos (nome, email, data de nascimento, id), e telefone com ( id, telefone),
porem não consigo atualizar os dados com o comando q criei, alguem pode me ajudar… agradeço a todos
o erro é o seguinte… NO VALUE SPECIFIED FOR PARAMETER 6…
ah telefone é multivalorado…

package Agenda;

import Agenda.Contato;
import Dao.ContatoDao;


import java.sql.Date;
import java.sql.SQLException;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.List;
import javax.swing.*;

public class ContatoController {
	
	private Date formatarData(String data) throws ParseException{
		
		DateFormat formatter = new SimpleDateFormat ("dd/MM/yyyy");
		return new Date(formatter.parse(data).getTime());
		
	}
	
	public void salvar(String nome, String email, String dtNascimento, String telefone, String celular) throws SQLException,
	ParseException{
		
		Contato contato = new Contato();
		contato.setNome(nome);
		contato.setEmail(email);
		contato.setData_nascimento(formatarData(dtNascimento));
		contato.setTelefone(telefone);
		contato.setCelular(celular);
		
		new ContatoDao().salvar(contato);
		
	}
	
	
	public void alterar( long id, String nome, String email, String dtNascimento, String telefone, String celular) throws SQLException,
	ParseException{
		
		Contato contato = new Contato();
		contato.setId(id);
		contato.setNome(nome);
		contato.setEmail(email);
		contato.setData_nascimento(formatarData(dtNascimento));
		contato.setTelefone(telefone);
		contato.setCelular(celular);
		
		new ContatoDao().alterar(contato);
		
	}

	
	public List<Contato>listaContatos(){
		
		ContatoDao dao = new ContatoDao();
		
		try{
			return dao.findContatos();
			
		}catch(SQLException e){
			JOptionPane.showMessageDialog(null, "Não foi possivel localizar esse contato\n" +
		e.getLocalizedMessage());
		}
		
		return null;
		
	}
	
	public void excluir (long id) throws SQLException{
		new ContatoDao().excluir(id);
	}
	
	public Contato buscaContatoPorNome(String nome) throws SQLException{
		ContatoDao dao = new ContatoDao();
		return dao.finfByName(nome);
	
	}
}

package Dao;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import Agenda.Contato;
import Agenda.GenericDao;


public class ContatoDao extends GenericDao {
	
	public void salvar(Contato contato) throws SQLException{
		
		String insertContato = " INSERT INTO CONTATOS ( nome, email, data_nascimento) VALUES (?,?,?)";
		String insertTelefones = "INSERT INTO TELEFONE (id, telefone) VALUES (?,?)";
		int id = save(insertContato, contato.getNome(), contato.getEmail(), contato.getData_nascimento());
		
		if (id > -1){
			save(insertTelefones, id, contato.getTelefone());
			save(insertTelefones, id, contato.getCelular());
		}
		
	}
	
	public void alterar (Contato contato) throws SQLException{
		String update = "UPDATE CONTATOS SET" +
				"c.id=?, c.nome = ?, c.email =?, c.data_nascimento =?, t.telefone =? FROM CONTATOS c," +
				" TELEFONE t WHERE t.id = c.id and id =?";
		update(update, contato.getId(), contato.getNome(), contato.getEmail(), contato.getData_nascimento(),
				contato.getTelefone());
	}
	
	public void excluir (long id) throws SQLException{
		String delete = "DELETE FROM CONTATOS WHERE id = ?";
		delete(delete, id);
	}
	
	public List<Contato> findContatos() throws SQLException{
		
		List<Contato> contatos = new ArrayList<Contato>();
		
		String select = "SELECT c.id, c.nome, c.email, c.data_nascimento, t.telefone FROM CONTATOS c," +
				" TELEFONE t WHERE t.id = c.id";
		
		PreparedStatement stmt = getConnection().prepareStatement(select);
		ResultSet rs = stmt.executeQuery();
		
		while (rs.next()){
			Contato contato = new Contato();
			contato.setId(rs.getLong("id"));
			contato.setNome(rs.getString("nome"));
			contato.setEmail(rs.getString("email"));
			contato.setData_nascimento(rs.getDate("data_nascimento"));
			contato.setTelefone(rs.getString("telefone"));
				
			contatos.add(contato);
		}
		
		rs.close();
		stmt.close();
		
		return contatos;
	}
	
public Contato finfByName(String nome) throws SQLException{
		
		
		String select = "SELECT c.id, c.nome, c.email, c.data_nascimento, t.telefone FROM CONTATOS c," +
				" TELEFONE t WHERE t.id = c.id and c.nome = ?";
		
		Contato contato = null;
		PreparedStatement stmt = getConnection().prepareStatement(select);
		stmt.setString(1, nome);
		ResultSet rs = stmt.executeQuery();
		
		while (rs.next()){
			
			contato = new Contato();
			
			contato.setId(rs.getLong("id"));
			contato.setNome(rs.getString("nome"));
			contato.setEmail(rs.getString("email"));
			contato.setData_nascimento(rs.getDate("data_nascimento"));
			contato.setTelefone(rs.getString("telefone"));
					
		}
		
		rs.close();
		stmt.close();
		return contato;
			
		
	}


}

Não sei como está tentando fazer isso, mas, conte quantos “?” existem na query e quantos parâmetros são passados para o método update.

String update = "UPDATE CONTATOS SET" +  
                "c.id=?/*1*/, c.nome = ?/*2*/, c.email =?/*3*/, c.data_nascimento =?/*4*/, t.telefone =?/*5*/ FROM CONTATOS c," +  
                " TELEFONE t WHERE t.id = c.id and id =?/*6*/";  
        update(update, contato.getId()/*1*/, contato.getNome()/*2*/, contato.getEmail()/*3*/, contato.getData_nascimento()/*4*/,  
                contato.getTelefone()/*5*/);  

eu tirei um id=? e deu erro na sitax no mysql… como ficaria a consulta… não sei como fazer… abrigado amigo

Sinceramente, basta que você estude um pouco que vai conseguir fazer.

vou tentar aki, valeu, mas não acho nenhum tutorial bom sobre esse assunto, e olha q tenho procurado… obrigado

eu estive estudando aki um jeito e lí que A instrução UPDATE pode atualizar apenas uma tabela por vez, se eu quiser atulaizar as duas tabelas, tenho q fazer dois updates, o inner join não resolve não? agradeço a todos

Olá Cara blz?
Não tive tempo de ver direito seu primeiro post e nem sei se resolveu a questão.
Em relação a última pergunta o inner join funciona para você recuperar dados de mais de uma tabela desde que essas possuem relacionamento.
Você não consegue com esse comando atualizar dados (update). Dependendo da necessidade você pode criar uma consulta retornando os dados das duas tabelas usando o inner join e com o esse resultado atualizar.
Mais tarde vou ver com mais calma sua dúvida e ver se conseguimos te ajudar.

Abraços