Erro ao Editar Dados

22 respostas
C

Ola a todos Boa Tarde sou novo no forum e me ocorre o seguinte erro quando tento alterar dados no bando, ele passa todos os parametros, imprime a mensagem de confirmação de alterado com sucesso, porem ele não grava no banco os dados alterados, estou utilizando uma flag pra controlar entre editar e salvar, para salvar um novo salva perfeitamente porem ao editar da esse problema segue o codigo do controle:

<public void Editar(ModeloCliente mod){//cria metodo de editar

conex.conexao();//faz a coneção com o banco

try {

//Prepara o Statametn para o update no banco para alteraçao cadastro

PreparedStatement pst = conex.con.prepareStatement(update tabela_cliente set  nome_cliente=?, cpf_cliente=?,rg_cliente=?, cep_cliente=?, telefone_cliente=?, endereco_cliente=?, cidade_cliente=?, estado_cliente=? where id_cliente=?);

pst.setString(1, mod.getNome());//Altera dados no parametro vindo do modelo

pst.setInt(2, mod.getCpf());//Altera dados no parametro vindo do modelo

pst.setInt(3, mod.getRg());

pst.setInt(4, mod.getCep());

pst.setInt(5, mod.getTelefone());

pst.setString(6, mod.getEndereco());

pst.setString(7, mod.getCidade());

pst.setString(8, mod.getEstado());

pst.setInt(9, mod.getCodigo());

pst.execute();//Executa o prepared statement

JOptionPane.showMessageDialog(null,Dados Alterados Com Sucesso!);//Mensagem de alteraçao
} catch (SQLException ex) {
        Logger.getLogger(ControleCliente.class.getName()).log(Level.SEVERE, null, ex);
        JOptionPane.showConfirmDialog(null, "Erro Ao Fazer Alteraçao de dados:/n" +ex);//mensagem de erro + codigo de erro
    }
    
    conex.deconecta();//desconecta banco

}
Abaixo o codigo do form com o uso da flag:

<private void jB_SALVARActionPerformed(java.awt.event.ActionEvent evt) {

// TODO add your handling code here:

if(jT_NOME.getText().isEmpty()){//Tratativa para campos vazios

JOptionPane.showMessageDialog(null,O campo nome não pode ser vazio!);//imprimi mensagem de erro

jT_NOME.requestFocus();//Seleciona o cursor no campo refetente

}else if(jF_CPF.getText().isEmpty()){

JOptionPane.showMessageDialog(null,O campo CPF não pode ser vazio!);

jF_CPF.requestFocus();

}else if(jT_CIDADE.getText().isEmpty()){

JOptionPane.showMessageDialog(null,O campo Cidade não pode ser vazio!);

jT_CIDADE.requestFocus();

}else if(jF_TELEFONE.getText().isEmpty()){

JOptionPane.showMessageDialog(null,O campo Telefone não pode ser vazio!);

jF_TELEFONE.requestFocus();

}else if(jT_ENDERECO.getText().isEmpty()){

JOptionPane.showMessageDialog(null,O campo Endereço não pode ser vazio!);

jT_ENDERECO.requestFocus();

}else{//caso contrario entra no else e salva os dados no banco

if(flag == 1){///se flag for igual a 1 executa o salvar

mod.setNome(jT_NOME.getText());//seta na classe modelo no nome oque o usuario digitou no campo

mod.setCpf(Integer.parseInt(jF_CPF.getText()));//seta na classe modelo no cpf oque o usuario digitou no campo

mod.setRg(Integer.parseInt(jF_RG.getText()));

mod.setCep(Integer.parseInt(jF_CEP.getText()));

mod.setTelefone(Integer.parseInt(jF_TELEFONE.getText()));

mod.setEndereco(jT_ENDERECO.getText());//seta na classe modelo no endereço oque o usuario digitou no campo

mod.setCidade(jT_CIDADE.getText());//seta na classe modelo no cidade oque o usuario digitou no campo

mod.setEstado((String) jC_ESTADO.getSelectedItem());

cont.Salvar(mod);//chama o metodo salvar da classe modelo clientes
jT_NOME.setText("");//limpa os campos depois de salvo
    jF_CPF.setText("");//limpa os campos depois de salvo
    jF_RG.setText("");
    jF_CEP.setText("");
    jF_TELEFONE.setText("");//limpa os campos depois de salvo
    jT_ENDERECO.setText("");//limpa os campos depois de salvo
    jT_CIDADE.setText("");//limpa os campos depois de salvo
    jC_ESTADO.getSelectedItem();
    
    
    
    jT_NOME.setEnabled(false);//desabilita os campos depois de salvo
    jF_CPF.setEnabled(false);//desabilita os campos depois de salvo
    jT_CIDADE.setEnabled(false);//desabilita os campos depois de salvo
    jF_TELEFONE.setEnabled(false);//desabilita os campos depois de salvo
    jT_ENDERECO.setEnabled(false);//desabilita os campos depois de salvo
    
    preenche_tabela("select *from tabela_cliente order by nome_cliente");
    }else{ //caso flag seja 2 cai no else e apenas faz a atualizaçao dos dados
        mod.setNome(jT_NOME.getText());//pega o texto do jtcombobox e seta no nome na classe modelo
        mod.setCpf(Integer.parseInt(jF_CPF.getText()));//pega o texto do jtcombobox e seta no cpf na classe modelo
        mod.setRg(Integer.parseInt(jF_RG.getText()));
        mod.setCep(Integer.parseInt(jF_CEP.getText()));
        mod.setTelefone(Integer.parseInt(jF_TELEFONE.getText()));//pega o texto do jtcombobox e seta no telefone na classe modelo
        mod.setEndereco(jT_ENDERECO.getText());//pega o texto do jtcombobox e seta no endereço na classe modelo
        mod.setCidade(jT_CIDADE.getText());//pega o texto do jtcombobox e seta no cidade na classe modelo
        mod.setEstado((String) jC_ESTADO.getSelectedItem());
        cont.Editar(mod);//chama o controle o methodo editar
        preenche_tabela("select *from tabela_cliente order by nome_cliente");//chama o methodo preencher tabela ao iniciar o sistema
    }

Algum pode me dar um help ?ja reli o codigo umas 30 vezes hoje
desde ja obrigado!!

22 Respostas

Diego_Emmanuell

Ta meio ruim de ver o código, você está dando um commit?

C

como assim ?rsrs
Eu Altero os dados, ele envia porem não grava no banco
se eu postar um print melhora?

Diego_Emmanuell

Melhora sim.

Diego_Emmanuell

Se puder, manda os codigos dao de editar e de salvar;

C

o Editar

C

Salvar

C

Para voces que ja tem as manhas e bem mais de boa de achar o B.O eu ja reli varias vezes e parece tudo ok

rodriguesabner

Que erro dá?

C

Ele printa a mensagem dados salvos com sucesso, porem não salva no banco as alterações!
OBS: ele Salva, Exclui so não altera os dados!

C

Alguem pode me dar um help?

bruno_i25

Tenta dar um pst.executeUpdate() ou imprimir o erro com ex.printStackTrace()

C

Entao Bruno ele nao retorna erro algum, ele passa normal pra mensagem que foi alterado com sucesso porem ele nao salva no banco :confused:

Diego_Emmanuell

Nas configurações da conexão com o banco você está utilizando autoCommit?
Se não, estou sentindo falta deste comando nos códigos, apenas acho estranho que no adicionar dá certo.

Diego_Emmanuell

Agora, se eu fosse você eu mudaria o código de:

pst.execute();//Executa o prepared statement
JOptionPane.showMessageDialog(null,Dados Alterados Com Sucesso!);//Mensagem de alteraçao

para algo do tipo:

if(pst.executeUpdate > 0){
    JOptionPane.showMessageDialog(null,“Dados Alterados Com Sucesso!);//Mensagem de alteraçao
    }else{
    //Mensagem de erro
    }
C

Oi Diego não estou utilizando não qual a função do autoCommit ?

rodriguesabner

Não vi que você tinha respondido, desculpa. Lá no botão (CadastroCliente), você colocou alguma mensagem?

Diego_Emmanuell

no Connection você pode setar o autoCommit(true). Aqui eu não uso, por isso, eu preciso a cada update que faço no banco, realizar um commit dando um Connection.commit()

C

Tem um exemplo contextualizado pra eu dar uma olhada?

C

Voce diz no evento salvar cliente ?no salvar cliente tem mensagem de confirmação de cadastro ou erro ao cadastrar

rodriguesabner

Deixa, vc já tinha mandado aqui. Eu tô achando que o problema tá na sua flag. Tenta colocar em dois botões separados, que eu achado que ele vai atualizar

FearX

Relaxa, isso é vivência. Você pega com o tempo.

C

Fala pessoal consegui resolver o problema, Adicionando a Seguinte linha:
mod.setCodigo(Integer.parseInt(jT_cod.getText()));

Pra ele setar as atualizações no respectivo ID, porem eu não quero exibir o ID no formulario, como posso manter essa linha sem ter o campo jT_cod?

Criado 28 de novembro de 2018
Ultima resposta 30 de nov. de 2018
Respostas 22
Participantes 5