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

6 respostas
java
victor900

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

6 Respostas

victor900

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!!

Jothar_Aleksander

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).

Denilson_Junior

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

staroski

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

caiu no “Nenhum registro alterado”

staroski

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

Criado 13 de setembro de 2019
Ultima resposta 13 de set. de 2019
Respostas 6
Participantes 4