Olá…
Tenho o seguinte código abaixo que faz atualização na tabela do MySQL:
try
{
String sql = "UPDATE modem SET funcionario ='"+funcionario.getText()+"',"
+"imei_modem = '"+imeimodem.getText()+"',"
+"cargo = '"+cargo.getText()+"',"
+"area = '"+area_funcionario.getText()+"',"
+"preco_unitario = '"+preco_unitario.getText()+"',"
+"linha = '"+linha_modem.getText()+"',"
+"data_modificacao = '"+data_modificacao.getText()+"',"
+"imei_chip = '"+imei_chip.getText()+"',"
+"observacao = '"+prod_observacao.getText()+"',"
+"escritorio = '"+escritorio.getSelectedItem()
+"' Where imei_modem = '" + imeimodem.getText() + "'";
conecta_cliente.statement.executeUpdate(sql);
JOptionPane.showMessageDialog(null,"Alteração realizada com sucesso!");
conecta_cliente.executeSQL("Select * from modem");
conecta_cliente.resultset.first();
mostrar_dados();
}
catch(SQLException erro){
JOptionPane.showMessageDialog(null," Erro ao tentar alterar registro..." + erro);
}
O erro ta acontecendo aqui +“imei_modem = '”+imeimodem.getText()+"’,"
Ele me diz “Alteração realizada com sucesso!” mas quando ele retorna os dados nos JTextField, o campo onde tem o imeimodem.getText() não sofreu alteração nenhuma, a informação está a mesma que estava antes… na minha tabela, a coluna “imei_modem” está como varchar, mas já tentei colocar como int, double, char, mas mesmo assim esse campo não é atualizado na tabela, os outros atualizam normalmente, mas este não.
Se alguém puder me auxiliar… agradecerei.
vamos la
seu codigo esta extremamente confuso pq vc violou a lei zero da programação: nao se concatena strings para interpolar SQL e VALORES.
use PREPARED STATEMENT
veja este exemplo:
http://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html
perceba que ao inves de concatenar os valores, existe o marcador ? que sera usado depois para fazer o bind dos valores nas posições corretas.
assim vc tem menos erro ao criar o SQL e pode prestar atenção no que acontece no banco de dados.
1 curtida
Não tem nada de errado aí, o código funciona em outras partes do sistema, e até mesmo aí ele faz alteração dos dados, o problema só ta sendo em um único campo, da outra vez vc disse que o código tava errado etc, e o problema era só uma aspa simples que faltava…
ele nao disse que seu código esta errado, só comentou o fato de concatenar valores dentro do proprio sql, e isso realmente é confuso para algumas pessoas.
mais se voce trabalha dessa forma…
mais uma dica, tente fazer assim.
preparedStatement pst = conecta.conn.prepareStatement(“UPDATE modem SET cargo= ?, area = ?, preco_unitario= ? where imei_modem= ?”);
pst.setString(1, txtcargo.getText());
pst.setString(2, txtarea.getText());
pst.setString(3, txtpreco_unitario.getText());
pst.setString(4, txtimei_modem.getText());
vamos la:
quando vc concatena variaveis em um SQL, alem de ficar dificil de ler vc ainda precisa proteger o conteudo das mesmas.
imagine que vc tem uma observação com aspa simples. isso por si só ja quebra o seu sql. e é entrada para um possivel ataque de SQL injection (que se agora não é problema, um dia podera ser)
nunca é demais lembrar:
Fiz conforme vocês me indicaram, Obrigado pela ajuda… porém dá um erro ainda nessa parte:
conexao.prepareStatement - é preciso criar método prepareStatement ?
try
{
PreparedStatement pst = conexao.prepareStatement ("UPDATE modem SET funcionario= ?, imei_modem= ?, cargo= ?, area= ?, preco_unitario= ?, linha= ?, data_modificacao= ?, imei_chip= ?, observacao= ?, escritorio= ? where imei_modem= ?");
pst.setString(1, funcionario.getText());
pst.setString(2, imeimodem.getText());
pst.setString(3, cargo.getText());
pst.setString(4, area_funcionario.getText());
pst.setString(5, preco_unitario.getText());
pst.setString(6, linha_modem.getText());
pst.setString(7, data_modificacao.getText());
pst.setString(8, imei_chip.getText());
pst.setString(9, observacao.getText());
pst.setString(10, (String) escritorio.getSelectedItem());
String sql = null;
conecta_cliente.statement.executeUpdate(sql);
JOptionPane.showMessageDialog(null,“Alteração realizada com sucesso!”);
conecta_cliente.executeSQL(“Select * from modem”);
conecta_cliente.resultset.first();
mostrar_dados();
}
catch(SQLException erro){
JOptionPane.showMessageDialog(null," Erro ao tentar alterar registro..." + erro);
}
Olá,
Primeiro, você utiliza conexao, mas depois utiliza conecta_cliente.
Segundo, você utiliza conecta_cliente.statement.execUpdate(sql) ao invés de pst.execUpdate().
E siga a sugestão do @peczenyj, tutorial do Java sobre PrepareStament.
E o que você estava fazendo inicialmente era facilitar o manjado SQL Injection.
Deu certo meus caros, obrigado pela ajuda Tiago Peczenyj… eu dei uma lida naquele tutorial da Oracle que você mandou tmbm e vi uns videos, e consegui utilizar o PreparedStatmente…
Muito obrigado mais uma vez pela ajuda de vcs…
sabe o que é curioso? mesmo em ambiente controlado, onde ninguem vai tentar uma injeção de SQL pois pode rolar demissão, ainda pode dar problema pois vc não vai poder usar aspas - e as vezes se usa aspas no lugar de apostrofo.
Eu cansei de testar campos com Fulano D'Silva
e dava cada coisa
Colegas,
Alguém poderia me informar onde ta o erro no código? Quando clico em editar eu recebo a mensagem: “campo COUNT incorreto ou erro de sintaxe”
Fiz conforme me explicaram, mas recebo esse erro agora…
try
{
String sql = “UPDATE funcionarios_cad SET nome=?, cpf=?, cargo_atual=?, fixo=?, cel=?, sexo=?, cidade=?, usario=? where cpf = ?”;
PreparedStatement pstmt= funcionarios_cad.conexao.prepareStatement(sql); //onde tem conexao é o nome de "public Connection conexao" que vc criou na classe conexao
pstmt.setString (1, func_nome.getText().toUpperCase().trim());
pstmt.setString (2, func_cpf.getText().trim());
pstmt.setString (3, cargo_atual.getText().trim());
pstmt.setString (4, func_fixo.getText().trim());
pstmt.setString (5, func_cel.getText().trim());
pstmt.setString (6, (String) func_sexo.getSelectedItem());
pstmt.setString (7, (String) func_cidade.getSelectedItem());
pstmt.setString (8, func_usuario.getText().trim());
pstmt.executeUpdate();
JOptionPane.showMessageDialog(null,"Alteração realizada com sucesso!");
funcionarios_cad.resultset = funcionarios_cad.statement.executeQuery(“Select * from funcionarios_cad”);
funcionarios_cad.executeSQL(“Select * from funcionarios_cad”);
funcionarios_cad.resultset.first();
mostrar_dados();
}
catch (SQLException erro){
JOptionPane.showMessageDialog(null," Erro ao tentar alterar registro..." + erro);
}