0

I'm working on a project which uses postgresql with glassfish. When I execute Statement PreparedStatement pstmt = conn.prepareStatement(sql) it give me java.lang.NullPointerException.

Here is my code:

    String sql = "DELETE FROM blocklist WHERE ? >= time + ?;";
    
    try(Connection conn = this.connect(); 
            PreparedStatement pstmt = conn.prepareStatement(sql))
    {
        pstmt.setLong(1, System.currentTimeMillis());
        pstmt.setLong(2, blocktime);
        pstmt.executeUpdate();
    }
    catch(SQLException ex)
    {
        Logger.getLogger(RecordManager.class.getName()).log(Level.SEVERE, null, ex);
    }

connect() function is here which is being called at Connection conn = this.connect();:

private Connection connect()
{
    Connection con = null;
    try
    {
        con = DriverManager.getConnection(Config.dburl, Config.dbusername, Config.dbpassword);
    }
    catch(SQLException ex)
    {
        Logger.getLogger(RecordManager.class.getName()).log(Level.SEVERE, null, ex);
    }
    return con;
}

Here is exception log:

Severe:   Exception in thread "AWT-EventQueue-0"
Severe:   java.lang.NullPointerException
    at urrsm.sng.RecordManager.unblockrun(RecordManager.java:91)
    at urrsm.sng.WebScocketEnd$1.actionPerformed(WebScocketEnd.java:45)
    at javax.swing.Timer.fireActionPerformed(Timer.java:313)
    at javax.swing.Timer$DoPostEvent.run(Timer.java:245)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
    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:74)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
    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)
Jason Aller
  • 3,541
  • 28
  • 38
  • 38
Piyush Mishra
  • 327
  • 1
  • 11
  • Jacob G. I know about NullPointerException. I only want to know why it is occurring here? You may see my code nothing is set to null here. – Piyush Mishra Sep 21 '18 at 02:08

1 Answers1

1

It isn't possible to bind actual column names in a query, using a prepared statement. Only literal values can be bound. Try rephrasing your delete query as follows:

String sql = "DELETE FROM blocklist WHERE time <= ?;";

try (Connection conn = this.connect(); 
        PreparedStatement pstmt = conn.prepareStatement(sql)) {
    pstmt.setLong(1, System.currentTimeMillis() - blocktime);
    pstmt.executeUpdate();
}
catch (SQLException ex) {
    Logger.getLogger(RecordManager.class.getName()).log(Level.SEVERE, null, ex);
}
Tim Biegeleisen
  • 502,043
  • 27
  • 286
  • 360