GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

Metodo de update não esta alterando no banco e nem dando erro

Tags: #<Tag:0x00007f0bb30ee118>

Estou com um problema com um cadastro de usuário na parte de update no banco de dados, o problema é que ele não dá nem um erro; fiz um JOptionpane, mas ele lança que os dados do usuário foram cadastrados, porem ele não altera nada lá.
Tenho um de medico em que utiliza do mesmo método porem funciona perfeitamente!

  //classe UsuarioDAO.

    public void editar(Usuario usuario){
        conex.conexao();
        try {
            PreparedStatement pst = conex.con.prepareStatement("update usuarios set usu_nome=?, usu_tipo=?,"
                    + " usu_senha=? where usu_cod=?");
            pst.setString(1, usuario.getUsuNome());
            pst.setString(2, usuario.getUsuTipo());
            pst.setString(3, usuario.getUsuSenha());
            pst.setInt(4, usuario.getUsuCod());
            pst.execute();
            JOptionPane.showMessageDialog(null, "Dados alterados com sucesso!");            
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, "Erro ao alterar os dados");
        }
        
        conex.desconecta();
    }
  classe formUsuario(jFrame).
  //se der '1' ele salva caso contrario ele cai no botão alterar que está recebendo '2' 

   private void jButtonSalvarActionPerformed(java.awt.event.ActionEvent evt) {                                              
       if(jTextFieldNomeUsu.getText().isEmpty()){
            JOptionPane.showMessageDialog(null, "Preencha o campo NOME DE USUÁRIO para continuar!");
            jTextFieldNomeUsu.requestFocus();
        }else if(jPasswordFieldSenha.getText().isEmpty()){
            JOptionPane.showMessageDialog(null, "Preencha o campo SENHA para continuar!");
            jPasswordFieldSenha.requestFocus();
        }else if(jPasswordFieldConfiSenha.getText().isEmpty()){
            JOptionPane.showMessageDialog(null, "Preencha o campo CONFIRMAR SENHA para continuar!");
            jPasswordFieldConfiSenha.requestFocus();
        }else

       if(flag == 1){
        usua.setUsuNome(jTextFieldNomeUsu.getText());
        usua.setUsuTipo((String)jComboBoxTipo.getSelectedItem());
        usua.setUsuSenha(jPasswordFieldSenha.getText());
        usuDAO.salvar(usua);
        jTextFieldNomeUsu.setEnabled(false);
        jPasswordFieldConfiSenha.setEnabled(false);
        jPasswordFieldSenha.setEnabled(false);
        jButtonSalvar.setEnabled(false);
        jButtonExcluir.setEnabled(false);
        jTextFieldNomeUsu.setText("");
        jPasswordFieldSenha.setText("");
        jTextFieldPesquisa.setText("");
        jPasswordFieldConfiSenha.setText("");
       }else{
        usua.setUsuNome(jTextFieldNomeUsu.getText());
        usua.setUsuSenha(jPasswordFieldSenha.getText());
        usua.setUsuTipo((String)jComboBoxTipo.getSelectedItem());
        usuDAO.editar(usua);
        jTextFieldNomeUsu.setEnabled(false);
        jPasswordFieldConfiSenha.setEnabled(false);
        jPasswordFieldSenha.setEnabled(false);
        jButtonSalvar.setEnabled(false);
        jButtonExcluir.setEnabled(false);
        jTextFieldNomeUsu.setText("");
        jPasswordFieldSenha.setText("");
        jTextFieldPesquisa.setText("");
         jPasswordFieldConfiSenha.setText("");
       } 
    }                                             

    private void jButtonBuscarActionPerformed(java.awt.event.ActionEvent evt) {                                              
        /*Utilizamos aqui o método encapsulado set para pegar o que o usuário digitou no campo txtPesquisa*/
        usua.setPesquisar(jTextFieldPesquisa.getText());
        
        Usuario modelo;

        try {
            modelo = usuDAO.buscarPor(usua);
            if (modelo != null) {
                jTextFieldNomeUsu.setText(modelo.getUsuNome());
                /**
                 * String.valueOf() pega um Valor Inteiro e transforma em String
                 * e seta em jFormattedTextFieldCRM que é um campo do tipo texto
                 */
                jPasswordFieldSenha.setText(modelo.getUsuSenha());
                jPasswordFieldConfiSenha.setText(modelo.getUsuSenha());
                /*Para setarmos um campos Combobox utilizamos o método setSelectedItem**/
                jComboBoxTipo.setSelectedItem(modelo.getUsuTipo());
                
                /**
                 * Liberar os botões abaixo
                 */
                jButtonAlterar.setEnabled(true);
                jButtonExcluir.setEnabled(true);
                jButtonCancelar.setEnabled(true);
                jButtonSalvar.setEnabled(false);
            } else {
                JOptionPane.showMessageDialog(null, "Médico não Cadastrado");
            }
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, "Erro na camada gui FormMedico" + ex.getMessage());
        }
    } 

Sou novo aqui e programo a pouco tempo, então não sei como o fórum funciona e,se precisar de mais informações sobre o problema eu adiciono mais. obrigado galera!!

Se não cai no catch, e não altera, então provavelmente o valor do código usuario.getUsuCod() não é válido, por exemplo: a tua tabela tem 20 registros, mas tu está passando o código 21 (se não me engano, nesse caso a atualização simplesmente é ignorada e sem lançar uma exceção).

Tenta usar o ex.printStackTrace(); no catch para te mostrar o erro mais especifico

Troque o:

pst.execute();
JOptionPane.showMessageDialog(null, "Dados alterados com sucesso!");

Por:

int registros = pst.executeUpdate();
String mensagem = registros > 0 ? "Dados alterados com sucesso!" : "Nenhum registro alterado!"
JOptionPane.showMessageDialog(null, mensagem);

caiu no “Nenhum registro alterado”

Perfeito, agora você sabe que não há nenhum registro no banco que atenda às condições de sua query.