How to resolve java.lang.nullpointerexception in sqlite application?

Asked

Viewed 4,333 times

1

I am having problem 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 making a desktop application with java and Sqlite.

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

java.lang.nullpointerexception.

Follow the code for you to analyze:

   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 mistake 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)
  • 1

    Take this Try catch Exception, run again and paste here the complete error that will leave in the terminal, please.

  • 1

    It seems to me that either Forms or login is null. You can put the rest of the code?

  • the code is a little extensive, which part in particular you would like to see?

  • 1

    If you showed which line was wrong, it would help. But the error occurs due to a problem outside of this method, so this excerpt will not help.

  • Show line 156 of login.java

  • the 156 line is this pst = Conn.prepareStatement(sql);

  • So Conn is null at this point.

  • How do I solve Pablo, where and how?

  • At some point you should initialize your Conn variable. It references your database, so it is necessary to perform operations with the bank. Eg. Conn = Drivermanager.getConnection("jdbc:sqlite:test.db"); . Here has a good basis for research.

Show 4 more comments

2 answers

1

Hello!

If it is this line that is occurring the problem :

pst = conn.prepareStatement(sql); 

So your Connection is void!

For it to work, first we have to add the Sqlite library to your project.

Follow the download link!

Create a folder called lib at the project root and add the jar.

After right-click the jar (inside the lib folder) and select the Option

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 provides Connection

Follow 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 the 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);
        }
    }

0

thank you very much for the help of all, in fact the Conn was null, not due to my logic in the method enter(), more due to not giving the return in the method of connection with the bank, I was making the connection correctly, but had not returned the connection, was 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, thank you all.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.