How to solve the java.lang.nullpointerexception in application with sqlite?

1

I'm having trouble with this exception. I have seen some tutorials here, but none of them can solve my problem. Even the answers to similar questions could not satisfy my need.

I'm doing a desktop application with java and SQLite.

I think the error is here, because it only appears at the time of logging, however I followed the tutorial to the letter, but at the time of pressing the enter the error appears:

  

java.lang.nullpointerexception.

Here is the code for you to review:

   private void entrar() {

    String sql = "SELECT * FROM logins WHERE usuario = ? and senha = ?";

    try {

        pst = conn.prepareStatement(sql);
        pst.setString(1, nomeUser.getText());
        pst.setString(2, senhaUser.getText());

        rs = pst.executeQuery();

        if(rs.next()){
             JOptionPane.showMessageDialog(null, "Login efetuado com sucesso");
        }else{
             JOptionPane.showMessageDialog(null, "Login inexistente");
        }

    } catch (Exception e) {

        JOptionPane.showMessageDialog(null, e);

    }

}

The complete error would be

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at forms.login.entrar(login.java:156)
    at forms.login.btnEntrarKeyPressed(login.java:136)
    at forms.login.access$100(login.java:21)
    at forms.login$2.keyPressed(login.java:83)
    at java.awt.Component.processKeyEvent(Component.java:6493)
    at javax.swing.JComponent.processKeyEvent(JComponent.java:2832)
    at java.awt.Component.processEvent(Component.java:6312)
    at java.awt.Container.processEvent(Container.java:2236)
    at java.awt.Component.dispatchEventImpl(Component.java:4891)
    at java.awt.Container.dispatchEventImpl(Container.java:2294)
    at java.awt.Component.dispatchEvent(Component.java:4713)
    at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1954)
    at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:806)
    at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:1074)
    at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:945)
    at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:771)
    at java.awt.Component.dispatchEventImpl(Component.java:4762)
    at java.awt.Container.dispatchEventImpl(Container.java:2294)
    at java.awt.Window.dispatchEventImpl(Window.java:2750)
    at java.awt.Component.dispatchEvent(Component.java:4713)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
    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:76)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
    at java.awt.EventQueue$4.run(EventQueue.java:731)
    at java.awt.EventQueue$4.run(EventQueue.java:729)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
    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)
    
asked by anonymous 30.12.2015 / 03:09

2 answers

1

Hello

If this line is experiencing the problem:

pst = conn.prepareStatement(sql); 

So your Connection is null!

In order for it to work, we first have to add the SQLite library in your project.

Follow the link to download!

Create a folder named lib in the project root and add the jar.

Right-click the jar (inside the lib folder) and select the

  

Build Path

And then

  

Add to Build Path.

This will add to the project so you can load your Connection .

The next step is to create a method that makes it available to Connection

Here's an example:

public static final Connection getConnection(){

try {

Class.forName("org.sqlite.JDBC");

return DriverManager.getConnection( (“jdbc:sqlite:nomeDoSeuBanco.db") );

} catch (final  Exception e) {

e.printStackTrace();

return null;

}
}

When using Connection , check that it is not null:

 private void entrar() {
        String sql = "SELECT * FROM logins WHERE usuario = ? and senha = ?";
        try {
        Connection con = getConnection();

        if(null == con){
        // está nula, não consegui carregar, então ão poderemos continuar!
        return;

        }
            pst = conn.prepareStatement(sql);

            pst.setString(1, nomeUser.getText());

            pst.setString(2, senhaUser.getText());

            rs = pst.executeQuery();

            if(rs.next()){

                JOptionPane.showMessageDialog(null, "Login efetuado com sucesso");
            }else{

                JOptionPane.showMessageDialog(null, "Login inexistente");
            }
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, e);
        }
    }
    
30.12.2015 / 16:42
0

Thanks a lot for the help of all, in fact the conn was null, not due to my logic in the login method (), more due not being giving the return in the connection method with the bank, I was making the connection so correct, but had not returned the connection, stayed this way,

   public static Connection ConnectionDB(){

    try{
        Class.forName("org.sqlite.JDBC");
        Connection conn = DriverManager.getConnection("jdbc:sqlite:/home/aminadabe/Documentos/DBmembresia/membresiaDB.sqlite");
       // JOptionPane.showMessageDialog(null, "Deu certo");
       return conn;
    }
    catch(Exception e){
        JOptionPane.showMessageDialog(null, e);
    }

    return null;
}

In this way, I solved the problem, thanks to everyone.

    
31.12.2015 / 00:44