Java com MySQL - alterar dados no banco

Estou com um projeto e não estou conseguindo fazer alterar o dados no banco, esta tudo funcionando mesnos a a alteração, fiz desta forma, quando clico em um campo da tabela ela coloca dotos os dados em uma caixa de texto, para fazer alteração, o codigo compila, exibe a mensagem salvo mas nao muda no banco

String sql = "UPDATE cliente SET nome='"
            + Jnome.getText() + "', nome='"
            + Jcpf.getText() + "', cpf='"
            + Jendereco.getText() + "', endereco='"
            + Jnumero.getText() + "', numero='"
            + Jcidade.getText() + "', cidade='"
            + Jcep.getText() + "', cep='"
            + Jtelefone.getText() + "', telefone='";
    jOperacoesBD.ExecutaSQL(sql);
    
    JOptionPane.showMessageDialog(null, "Alterado com sucesso!");   
    
    this.PopularJTable("SELECT * FROM cliente ORDER BY nome DESC");

Cara não faça dessa forma, concatenando strings no seu sql…

Use preparedstatements

meu projeto é bem grande e pra isso teria que mudar muito nele, só que nao tenho tempo…rsrs
vou apresenta-lo hoje as 11horas, estou no trabalho e pegando uns minutinhos para tentar resolver esse codigo

O que eu reparei na sua query, é que você repetiu o campo nome duas vezes, isso começou a colocar endereço no cpf, numero no endereço, cidade no numero e por ai vai… e se reparar bem, verá que o campo telefone no final ficou sem valor, porque o valor dele foi pro cep :joy:

Outra coisa, falta um WHERE no seu código, cuidado, você pode acabar atualizando todos os registros da tabela…

Os campos estão na ordem correta

ele me da esse erro tbm

Não consegui conectar, erro: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘’’ at line 1

Eu disse na sua query (sql) e não na sua tela… o erro é justamente por isso que falei, erro de sintaxe…

O trecho que está causando tudo isso é esse…

... SET nome='" + Jnome.getText() + "', nome='" + Jcpf.getText() + "', cpf=...

Entendeu agora?

Entendi que esta errado mas nao como arrumar, basicamente aprendi mais aqui no forum do que nas minhas aulas, meu prof nao mostrava quase nada, ai tentei fazer um mega projeto mas ta dificil, consegue me ajudar com esse codigo falta apenas isso

Não existe coisa pior do que professor com má vontade não é?

Vamos lá… já que você não quer perder tempo usando PreparedStatements, vou mostrar uma forma mais intuitiva e até performática usando StringBuilder ok?

StringBuilder sql = new StringBuilder("UPDATE  cliente SET ");
sql.append("nome = '").append(Jnome.getText()).append("',");
sql.append("cpf = '").append(Jcpf.getText()).append("',");
sql.append("endereco = '").append(Jendereco.getText()).append("',");
sql.append("numero = '").append(Jnumero.getText()).append("',");
sql.append("cidade = '").append(Jcidade.getText()).append("',");
sql.append("cep = '").append(Jcep.getText()).append("',");
sql.append("telefone = '").append(Jtelefone.getText()).append("' ");
sql.append("WHERE criterio = '").append("campo criterio aqui").append("'");

jOperacoesBD.ExecutaSQL(sql.toString());

Preste bem atenção em cada vírgula, espaço etc e na ultima linha, do where… você precisa colocar o valor para atender o critério do where, caso o contrário você corre o risco de alterar a tabela inteira…

Olha a diferença se você usar PreparedStatements…

Primeiro a query…

String sql = "UPDATE cliente SET nome=?, cpf=?, endereco=?, numero=?, cidade=?, cep=?, telefone=? WHERE criterio=?";

Depois os parâmetros…

PreparedStatement pstm = conexao.prepareStatement(sql);
pstm.setString(1, Jnome.getText());
pstm.setString(2, Jcpf.getText());
pstm.setString(3, Jendereco.getText());
pstm.setString(4, Jnumero.getText());
pstm.setString(5, Jcidade.getText());
pstm.setString(6, Jcep.getText());
pstm.setString(7, Jtelefone.getText());
pstm.setString(8, "campo criterio aqui");
pstm.executeUpdate();

Bem mais fácil de entender não? E ainda de quebra aumenta a segurança do projeto…

Dá uma fuçada depois…

http://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html

1 curtida

Cara… para gravação de dados, como o seu sistema que captura campos, eu usa objetos.
crio objetos do tipo daquela classe, e envio para o metodo de gravação, muito mais seguro e não dá erro

1 curtida

PreparedStatement é muito mais simples, serio mesmo

1 curtida

entendi que o meu foi 10x mais complicado…kkkk
oque seria esse campo criterio ?
estudar praticamente por conta é dificil, nao entendo tudo ainda

só queria fazer funcionar mas ta dificil

Procura no youtube Universidade XTI, la te um curso de Java, muito boom, e um video sobre conexao com banco de dados