Erro ao salvar no BD - Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException

3 respostas
programaçãojavamysql
F

Olá pessoal!

Estou estudando Java e criei um projetinho com formulário para inserção, alteração e exclusão junto ao banco de dados. Criei o banco, as camadas DAO, MODEL e VIEW. Porém, quando executo o programa e vou testar uma inserção, ele volta a seguinte exceção:

Exception in thread AWT-EventQueue-0 java.lang.NullPointerException

at model.dao.UsuarioDAO.save(UsuarioDAO.java:36)

at view.CadastroPessoa.btnEnviarActionPerformed(CadastroPessoa.java:128)

at view.CadastroPessoa.access$000(CadastroPessoa.java:18)

at view.CadastroPessoa$1.actionPerformed(CadastroPessoa.java:55)

at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)

at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)

at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)

at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)

at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)

at java.awt.Component.processMouseEvent(Component.java:6539)

at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)

at java.awt.Component.processEvent(Component.java:6304)

at java.awt.Container.processEvent(Container.java:2239)

at java.awt.Component.dispatchEventImpl(Component.java:4889)

at java.awt.Container.dispatchEventImpl(Container.java:2297)

at java.awt.Component.dispatchEvent(Component.java:4711)

at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4904)

at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4535)

at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4476)

at java.awt.Container.dispatchEventImpl(Container.java:2283)

at java.awt.Window.dispatchEventImpl(Window.java:2746)

at java.awt.Component.dispatchEvent(Component.java:4711)

at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:760)

at java.awt.EventQueue.access$500(EventQueue.java:97)

at java.awt.EventQueue$3.run(EventQueue.java:709)

at java.awt.EventQueue$3.run(EventQueue.java:703)

at java.security.AccessController.doPrivileged(Native Method)

at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)

at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:84)

at java.awt.EventQueue$4.run(EventQueue.java:733)

at java.awt.EventQueue$4.run(EventQueue.java:731)

at java.security.AccessController.doPrivileged(Native Method)

at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)

at java.awt.EventQueue.dispatchEvent(EventQueue.java:730)

at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)

at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)

at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)

at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

Percebi que o erro pode estar na linha 36 da minha classe UsuarioDAO, quando eu tento buscar a chave estrangeira de Pessoa, porém não consigo identificar o que está de errado.

Segue o código da classe:

public class UsuarioDAO {

private Connection con = null;

public UsuarioDAO() {
    con = ConnectionFactory.getConnection();
    PreparedStatement stmt = null;
}

public boolean save(Usuario usuario) {
    String sql = "INSERT INTO Usuario (login, senha, Pessoa_idPessoa) VALUES (?,?,?)";
    PreparedStatement stmt = null;

    try {
        stmt = con.prepareStatement(sql);
        stmt.setString(1, usuario.getUsuario());
        stmt.setString(2, usuario.getSenha());
        stmt.setInt(3, usuario.getPessoa().getIdPessoa());
        stmt.executeUpdate();
        return true;
    } catch (SQLException ex) {
        System.err.println("Erro: " + ex);
        return false;
    }finally{
        ConnectionFactory.closeConnection(con);
    }

}

}

O código ao clicar para cadastrar:

private void btnEnviarActionPerformed(java.awt.event.ActionEvent evt) {                                          
    // TODO add your handling code here:       
    Usuario u = new Usuario();
    Pessoa p = new Pessoa();
    PessoaDAO pessoa = new PessoaDAO();
    UsuarioDAO usuario = new UsuarioDAO();
    p.setNome(txtNome.getText());
    p.setCpf(txtCPF.getText());
   u.setUsuario(txtUsuario.getText());
   u.setSenha(txtSenha.getText());        
   if(usuario.save(u) && pessoa.save(p)){
       JOptionPane.showMessageDialog(null,"Salvo com sucesso!");
   }else{
       JOptionPane.showMessageDialog(null,"Não salvou!");
   }        
   
}

Alguém poderia dar uma ajuda nisso, por favor?

3 Respostas

staroski

No método save da classe UsuarioDAO, na linha 36, você está tentando acessar um membro de um objeto que não foi inicializado.

F

Certo.

No meu evento, eu adicionei uma linha de código:

Pessoa p = new Pessoa();

u.setPessoa§;

assim não deu mais aquela exceção, mas assim que executo o programa, ele lança outra exceção:

Erro: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails (bdpessoa.usuario, CONSTRAINT fk_Usuario_Pessoa1 FOREIGN KEY (Pessoa_idPessoa) REFERENCES pessoa (idPessoa))

Poderia dar uma luz pra mim?

staroski

Não sei como estão os relacionamentos na sua base da dados, mas o erro é por causa de uma violação de integridade.
Provavelmente você já tem um usuário com aquela pessoa

Criado 1 de setembro de 2018
Ultima resposta 2 de set. de 2018
Respostas 3
Participantes 2