Melhor maneira de se fazer uma atualização

ola…entao fiz um metodo para a atualização dos campos…

codigo…


stmt.execute("UPDATE pessoas set nome='"+Snome+"',endereco='"+Sendereco+"',numero='"+Snumero+"',complemento='"
+Scomplem+"',bairro='"+Sbairro+"',cidade='"+Scidade+"',estado='"+Sestado+"',cpf='"+Scpf+"' where cpf='"+cpf+"'AND nome='"+nome+"'");

onde no caso o where ta igualando as Strings q seram digitadas para usar como referencia - nome_metodo(String nome,String cpf)…

entao o metodo esta assim…porem nas minhas telas swing nao quero q apareça o campo codigo…pois nao e necessario…ai acontece o seguinte…qndo altero um campo e coloco para atualizar…nao sendo o campo nome nem cpf…ele atualiza normalmente…agora caso for um destes dois campos ele nao atualiza…pois estou flando para atualizar onde nome e cpf forem igual ao nome e cpf q digitar…
como posso melhorar isso…ou seja…poder atualizar normalmente todos os campos…sendo q nao quero q apareça nas minhas janelas o codigo dos cadastros…so os campos pertinentes msmo…
vlw

esse é a consulta de UPDATE, cade a de SELECT onde ele joga na tela?

posta códigos maiores, pra ter maior noção.

vc está usando java, então trabalhe com objetos, basta vc fazer a consulta e colocar ela em um objeto, nesse instante o id e todos os outros campos estarão no objeto depois passe o objeto pra tela, altere os valores e atualize o objeto que vc consultou desse modo vc poderá atualizar pelo id normalmente

ao meu ver, ele pode estar usando isso dentro de uma classe DAO, mas o principal deveria ser usar um PreparedStatement, e inserir os parâmetros através dos setObject’s necessários (setDate, setString, setObject, etc…)

Agora, se como eles disseram, você não tem uma classe Dao, melhor dar uma estudada no MVC.

codigo metodo…


public boolean atualizapessoas(String Snome, String Sendereco, String Snumero, String Scomplem, String Sbairro, String Scidade, String Sestado, String Scpf,String nome){ 
	try{Statement stmt=conex.createStatement();
	stmt.execute("UPDATE pessoas set nome='"+Snome+"',endereco='"+Sendereco+"',numero='"+Snumero+"',complemento='"  
+Scomplem+"',bairro='"+Sbairro+"',cidade='"+Scidade+"',estado='"+Sestado+"',cpf='"+Scpf+"' where cpf='"+cpf+"'AND nome='"+nome+"'");
	return true;
}catch(SQLException sql){
	System.out.println("Erro na atualização"+sql.getMessage());
return false;
}

chamando…

boolean atualiza = pessoas.atualizapessoas(SScpf,SSnome,Nome,Endereco,Cidade,Estado,Cpf);
if(atualiza)//ha outras comparações aki tmb{
//faço uma linha de codigo;
}else if{
//outra comparação
}//assim por diante ate acabar minhas validações

Segue uma dica de como fazer isso que você iniciou da forma “politicamente correta”, pelo menos bem perto disso porque existe outras formas de se fazer isso, a melhor coisa é você já começar pelo jeito “certo”.

[code] public boolean atualizarPessoa(String nome, String endereco, String numero, String complemento, String bairro, String cidade, String estado, String cpf) throws SQLException {
/*
* Pegue o hábito de usar as variávies no padrão java:
* - nome de variável (atributo) sempre inicia com minúscula, ex: valorLiquido, dataEmissao, nomeContador
/
String sql = “”
+ “UPDATE "
+ " pessoas "
+ “SET "
+ " nome=?,”
+ " endereco=?,”
+ " numero=?,"
+ " complemento=?,"
+ " bairro=?,"
+ " cidade=?,"
+ " estado=? "
+ “WHERE "
+ " cpf=?”; // CPF é um número único, portanto só precisa dele aqui
/

* No UPDATE você nao pode atualizar uma chave, o CPF nesse caso é a chave,
*
* Pegue o hábito de usar um PreparedStatement que fica mais ‘elegante’ e melhor
* para dar manutenção.
*/
PreparedStatement ps = conn.prepareStatement(sql);
int index = 0;
ps.setObject(++index, nome);
ps.setObject(++index, endereco);
ps.setObject(++index, numero);
ps.setObject(++index, complemento);
ps.setObject(++index, bairro);
ps.setObject(++index, cidade);
ps.setObject(++index, estado);
ps.setObject(++index, cpf); // chave, usado no WHERE
int linhasAlteradas = ps.executeUpdate();
System.out.println("Linhas alteradas na tabela: " + linhasAlteradas);

    /*
     * Não dispare as Exceções dentro desse tipo de método, pegue o hábito de
     * passar a Exception para a camada superior (a interface do usuário).
     * Veja na declaração do método isso: throws SQLException {...
     */
    return true;
}[/code]

Na verdade a melhor forma de fazer isso era você passar um objeto do tipo Pessoa para o método e dentro do método pegar os valores das propriedades do objeto, algo assim:

public boolean atualizarPessoa(Pessoa pessoa) throws SQLException { String sql = "" + "UPDATE " + " pessoas " + "SET " + " nome=?," + " endereco=?," + " numero=?," + " complemento=?," + " bairro=?," + " cidade=?," + " estado=? " + "WHERE " + " cpf=?"; // CPF é um número único, portanto só precisa dele aqui PreparedStatement ps = conn.prepareStatement(sql); int index = 0; ps.setObject(++index, pessoa.getNome()); ps.setObject(++index, pessoa.getEndereco()); ps.setObject(++index, pessoa.getNumero()); ps.setObject(++index, pessoa.getCompelemento()); ps.setObject(++index, pessoa.getBairro()); ps.setObject(++index, pessoa.getCidade); ps.setObject(++index, pessoa.getEstado()); ps.setObject(++index, pessoa.getCpf()); // chave, usado no WHERE int linhasAlteradas = ps.executeUpdate(); System.out.println("Linhas alteradas na tabela: " + linhasAlteradas); return true; }

Espero ter esclarecido alguma coisa.

vlw cara…muito obrigado!