Atualizando dados no MySQL

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);
    }

vc pode criar um DAO

https://www.caelum.com.br/apostila-java-web/bancos-de-dados-e-jdbc/

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);
    }