Comando update não funciona no java

Aee galera boa tarde!!

Estou desenvolvendo um sistema simples de cadastro, porém estou tendo dificuldades ao fazer o evento de ‘Alterar Registro’ …

Tudo porque meu comando update está dando erros, ocorrendo da seguinte maneira… Eu cadastro o dado, depois faço pesquisa (Select) daii blz o sistema me traz todos os dados dakele cadastro, mas ae ao realizar o update…e fazer uma pesquisa de novo no sistema…alguns dados somem…como por exemplo cpf e rg…e os caracteres vão parar no meio do jtextfield…só q no console do netbeans não aparece nenhuma msg de erro…só q no sistema n altera os dados…exibe a msg de alterado com sucesso…mas n altera e além de tudo some com alguns dados…

Detalhe: estou usando NetBeans com Mysql

segue abaixo o código do update:

//Comando Update


  Connection conn = null;
   String url = "jdbc:mysql://localhost:3306/";
   String dbName = "test";
   String driver = "com.mysql.jdbc.Driver";

 
try{ //tratamento de erros
 
 
  Class.forName(driver);
  conn =    (Connection) DriverManager.getConnection(url+dbName,"root","");
 
 
Statement stmt = (Statement) conn.createStatement(); 
 

     int id = Integer.parseInt(jTextField8.getText());
     String data_cad = jFormattedTextField2.getText();
     String nome = jTextField38.getText();
     String tipo =  jComboBox13.getSelectedItem().toString();     
     String data_nasc = jFormattedTextField1.getText();
     String sexo = jComboBox4.getSelectedItem().toString(); 
     String est_civil = jComboBox2.getSelectedItem().toString();
     String cpf = jTextField2.getText();
     String rg = jTextField3.getText();
     String orgao = jTextField4.getText();
     String conjugue = jTextField5.getText();
     String filhos = jTextField6.getText();
     String telefone = jTextField11.getText();
     String telefoneb = jTextField13.getText();
     String celular = jTextField12.getText();
     String celularb = jTextField9.getText();
     String cep = jTextField15.getText();
     String endereco = jTextField40.getText();
     String num_res = jTextField7.getText();
     String complemento = jTextField16.getText();
     String bairro = jTextField14.getText();
     String cidade = jTextField41.getText();
     String uf = jComboBox3.getSelectedItem().toString();
     String nacionalidade = jTextField10.getText();
     String email = jTextField25.getText();
     String skype = jTextField27.getText(); 
     String site = jTextField28.getText();
     
     
      registro = conn.createStatement().executeUpdate("update clientes set nome=' " + nome +" ', data_cad = ' " + data_cad + " ', tipo = ' " +tipo+ " ', data_nasc = ' " +data_nasc+ " ', sexo = ' " +sexo+ " ', est_civil = ' " +est_civil+ " ', cpf = ' " +cpf+ " ', rg = ' " +rg+ " ', orgao = ' " +orgao+ " ', conjugue = ' " +conjugue+ " ', filhos = ' " +filhos+ " ', telefone = ' " +telefone+ " ', telefoneb = ' " +telefoneb+ " ', celular = ' " +celular+ " ', celularb = ' " +celularb+ " ', cep = ' " +cep+ " ', endereco = ' " +endereco+ "', num_res = ' " +num_res+ " ', complemento = ' " +complemento+ " ', bairro = ' " +bairro+ " ', cidade = ' " +cidade+ " ', uf = ' " +uf+ " ', nacionalidade = ' " +nacionalidade+ " ', email = ' " +email+ " ', skype = ' " +skype+ " ', site = ' " +site+ " ' where id=' " + id + " ' ");
 
 
    if (registro!=0) JOptionPane.showMessageDialog(this,"Dados Alterados!");
 
    else JOptionPane.showMessageDialog(this,"Dados Não Alterados!");
 
    stmt.close();
 
    conn.close(); //fecha conexão com BD
 
        } catch(SQLException e){ //trata os erros
 
JOptionPane.showMessageDialog(this,"Erro Cmdo SQL"+e.getMessage());
 
} catch(ClassNotFoundException e){
JOptionPane.showMessageDialog(this,"Driver não encontrado");
 
}

Se alguém puder me ajuda. ^^

Desde já agradeçoo

  1. Ao postar códigos, use a tag code: http://www.guj.com.br/java/50115-voce-e-novo-no-guj-vai-criar-um-topico-e-colar-seu-codigo-fonte-leia-aqui-antes-por-favor
  2. Não poste tópicos contendo apenas LETRAS MAIUSCULAS nos títulos. Para se adequar as boas prática desse, e de outros fóruns, leia: http://www.istf.com.br/perguntas/
  3. Não faça esse monte de concatenações. Use PreparedStatement. Com esse monte de concatenação é bem fácil se perder em aspas ou em tipos do banco. Sem falar que você dá margem ao ataque de SQL injection.
  4. O comando Update funciona perfeitamente no Java. Se o seu não está funcionando, é porque há erro no seu SQL. Tente ver que String está sendo gerada no debug e submete-la diretamente ao banco de dados. Talvez lá ele dê um erro mais descritivo.
  5. Não avacalhe vc mesmo, trata exceções de maneira adequada. Logue o erro completo em algum lugar, leia o texto do erro.

Por favor, coloca teu código entre a tag code.

Má prática: Statement
Em vez de usar o PreparedStatement, você pode usar uma interface mais simples chamada
Statement, que simplesmente executa uma cláusula SQL no método execute:
Statement stmt = con.createStatement();
stmt.execute(“INSERT INTO …”);
stmt.close();
Mas prefira a classe PreparedStatement que é mais rápida que Statement e deixa seu código muito mais
limpo.
Geralmente, seus comandos SQL conterão valores vindos de variáveis do programa Java; usando
Statements, você terá que fazer muitas concatenações, mas usando PreparedStatements, isso fica mais
limpo e fácil.
Fonte: Apostila CAELUM-JAVA-WEB-FJ21

Kiko, utilize PreparedStatement

Crie uma String para adicionar todo seu comando:

"update clientes set nome=' " + nome +" ', data_cad = ' " + data_cad + " ', tipo = ' " +tipo+ " ', data_nasc = ' " +data_nasc+ " ', sexo = ' " +sexo+ " ', est_civil = ' " +est_civil+ " ', cpf = ' " +cpf+ " ', rg = ' " +rg+ " ', orgao = ' " +orgao+ " ', conjugue = ' " +conjugue+ " ', filhos = ' " +filhos+ " ', telefone = ' " +telefone+ " ', telefoneb = ' " +telefoneb+ " ', celular = ' " +celular+ " ', celularb = ' " +celularb+ " ', cep = ' " +cep+ " ', endereco = ' " +endereco+ "', num_res = ' " +num_res+ " ', complemento = ' " +complemento+ " ', bairro = ' " +bairro+ " ', cidade = ' " +cidade+ " ', uf = ' " +uf+ " ', nacionalidade = ' " +nacionalidade+ " ', email = ' " +email+ " ', skype = ' " +skype+ " ', site = ' " +site+ " ' where id=' " + id + " ' ");  

Após o comando execute o Update.

Ex:

[code]
PreparedStatement stmt = connection.prepareStatement(“STRING_CRIADA_ATUALIZAR”);

//Seus setters, e se necessitar getters comandos.
//stmt.setString(1, objeto.GetNome());

		stmt.execute();
		stmt.close();[/code]

Cara, primeiro, quando vc postar código, por favor use as tags Code dos botões, uma antes e outra depois do código, faz com que ele fique mais legível

Agora o teu código, pelo que tudo indica, tua string foi mal montada, olhe como você fez:

registro = conn.createStatement().executeUpdate(
                    "update clientes set nome=' " + nome + 
                    " ', data_cad = ' " + data_cad + 
                    " ', tipo = ' " + tipo + 
                    " ', data_nasc = ' " + data_nasc + 
                    " ', sexo = ' " + sexo + 
                    " ', est_civil = ' " + est_civil + 
                    " ', cpf = ' " + cpf + 
                    " ', rg = ' " + rg + 
                    " ', orgao = ' " + orgao + 
                    " ', conjugue = ' " + conjugue + 
                    " ', filhos = ' " + filhos + 
                    " ', telefone = ' " + telefone + 
                    " ', telefoneb = ' " + telefoneb + 
                    " ', celular = ' " + celular + 
                    " ', celularb = ' " + celularb + 
                    " ', cep = ' " + cep + 
                    " ', endereco = ' " + endereco + 
                    "', num_res = ' " + num_res + 
                    " ', complemento = ' " + complemento + 
                    " ', bairro = ' " + bairro + 
                    " ', cidade = ' " + cidade + 
                    " ', uf = ' " + uf + 
                    " ', nacionalidade = ' " + nacionalidade + 
                    " ', email = ' " + email + 
                    " ', skype = ' " + skype + 
                    " ', site = ' " + site + 
                    " ' where id=' " + id + " ' ");

Observe os espaços que você usou entre a aspa simples e a dupla.

Pelo que tudo indica é isso que fez o resultado dar errado.

Observe como a tua String fica montada coloque:

“update clientes set nome=’ Carlos ', data_cad = ’ 15/03/2011 ', tipo = ’ 2 ', data_nasc = ’ 10/06/1960 '…”

Ou seja, todos os teus campos são gravados com um espaço antes e um depois.

Se depois vc faz uma pesquisa, tua informação nunca vai bater.

E claro, esse tipo de erro não existiria se vc usasse PreparedStatements. É mais prático, fica melhor visivel.

Alem é claro de usar o comando correto de Atualização.
Procure se informar do Comando UPTADE SQL.

Ou use PreparedStatements e não se preocupe com:

  1. Tipos de dados do banco (Date, por exemplo);
  2. Uso de aspas simples;
  3. SQL Injection;
  4. Código ilegível;
  5. Usuários do GUJ insistindo para você usar PreparedStatement.

No seu SQL tem coisas estranhas. Há vários campos numéricos que estão entre aspas simples. No seu banco, tudo é string mesmo, inclusive o id?

Concordo com Vini,

Alias, isso tudu esta numa tabela só?

Cara da uma revisada no conteudo do seu banco de dados, e comando sql.
Vai funcionar.
Continue tentando, qualquer duvida poste aqui.

Desculpa galera essa eh a primeira vez q posto aki no fórum… =/

mas blz, entaooo exceto o campo id q eh int…o resto dos campos são todos varchar…

vooo tenta faze da forma q me mostraram…

Volto a repetir Kiko.

Siga uma programação mais limpa.
Procure não misturar mtas coisas pra nao ficar confuso em relação ao que digitou.

É mais facil ao debugar e quando as outras pessoas enxergam seu código.

1-Revise sua lógica antes de escrever códigos

Link para atualizar-se de programação “Code Clean”

Vai te ajudar a entender sua lógica.