RK.
RK.

Reputation: 991

I can not solve this "NullPointerException"

i am trying to do access the database table records using swing event handling but after pressing the button it is showing exception. i dont know what is going wrong. here is my code:

private void DisplayAllButtonActionPerformed(java.awt.event.Act ionEvent evt) {

    try { 

        String SQL = "SELECT * FROM OCCUPANTS";
        rs = stmt.executeQuery( SQL ); //line no 264

        while( rs.next( )) {
            int id_col = rs.getInt("ID");
            String id=Integer.toString(id_col);
            String room =rs.getString("ROOM");
            String occupant = rs.getString("OCCUPANT");

            DisplayArea.setText( id + " " + room + " " + occupant);
        }
   } 
   catch ( SQLException err ) {
        System.out.println( err.getMessage( ) );
   }
}

Fallowing is the exception:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at wumpus.WumpusGUI.DisplayAllButtonActionPerformed(W umpusGUI.java:264)
at wumpus.WumpusGUI.access$300(WumpusGUI.java:16)
at wumpus.WumpusGUI$4.actionPerformed(WumpusGUI.java: 164)
at javax.swing.AbstractButton.fireActionPerformed(Abs tractButton.java:2018)
at javax.swing.AbstractButton$Handler.actionPerformed (AbstractButton.java:2341)
at javax.swing.DefaultButtonModel.fireActionPerformed (DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultB uttonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseRe leased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.jav a:6505)
at javax.swing.JComponent.processMouseEvent(JComponen t.java:3321)
at java.awt.Component.processEvent(Component.java:627 0)
at java.awt.Container.processEvent(Container.java:222 9)
at java.awt.Component.dispatchEventImpl(Component.jav a:4861)
at java.awt.Container.dispatchEventImpl(Container.jav a:2287)
at java.awt.Component.dispatchEvent(Component.java:46 87)
at java.awt.LightweightDispatcher.retargetMouseEvent( Container.java:4832)
at java.awt.LightweightDispatcher.processMouseEvent(C ontainer.java:4492)
at java.awt.LightweightDispatcher.dispatchEvent(Conta iner.java:4422)
at java.awt.Container.dispatchEventImpl(Container.jav a:2273)
at java.awt.Window.dispatchEventImpl(Window.java:2719 )
at java.awt.Component.dispatchEvent(Component.java:46 87)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.j ava:703)
at java.awt.EventQueue.access$000(EventQueue.java:102 )
at java.awt.EventQueue$3.run(EventQueue.java:662)
at java.awt.EventQueue$3.run(EventQueue.java:660)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPri vilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPri vilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:676)
at java.awt.EventQueue$4.run(EventQueue.java:674)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPri vilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java: 673)
at java.awt.EventDispatchThread.pumpOneEventForFilter s(EventDispatchThread.java:244)
at java.awt.EventDispatchThread.pumpEventsForFilter(E ventDispatchThread.java:163)
at java.awt.EventDispatchThread.pumpEventsForHierarch y(EventDispatchThread.java:151)
at java.awt.EventDispatchThread.pumpEvents(EventDispa tchThread.java:147)
at java.awt.EventDispatchThread.pumpEvents(EventDispa tchThread.java:139)
at java.awt.EventDispatchThread.run(EventDispatchThre ad.java:97)
BUILD SUCCESSFUL (total time: 28 seconds)

Here is the globally initialization of stmt

public class WumpusGUI extends javax.swing.JFrame {

    Connection con;
    Statement stmt;
    ResultSet rs;
    /**
     * Creates new form WumpusGUI
     */
    public WumpusGUI() {
        initComponents();
        DBConnect();
    }

    public void DBConnect() {
        try {
            String host = "jdbc:derby://localhost:1527/occupants";
            String uName = "ravi";
            String uPass= "ravi";
            Connection con = DriverManager.getConnection( host, uName, uPass );
            Statement stmt = con.createStatement();
        }  
        catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Thanks.

Upvotes: 0

Views: 178

Answers (4)

Jon Skeet
Jon Skeet

Reputation: 1503290

Well, you haven't shown where stmt is being declared, but it sounds like it's probably null. Where were you expecting it to be set to a non-null value?

Two points about this:

  • You should be using a separate PreparedStatement each time you execute a query
  • You shouldn't be performing database access in a UI thread anyway

(Additionally, your method name violates Java naming conventions.)

EDIT: From your comments, you've got:

public class WumpusGUI ... {
    Statement stmt;

    public void DBConnect() {
        ...
        Statement stmt = con.createStatement();
        ...
    }
}

That line of your method is declaring a new local variable - it isn't assigning a value to the instance variable, so the instance variable remains null.

The smallest "fix" would be to change that line to just:

stmt = con.createStatement();

... but as I said above, that wouldn't be the right fix. Ideally you should get all of this database code out of your GUI class to start with, but at least you should be creating a new statement each time you want to execute it. (And then closing it in a finally block.)

EDIT: Additionally, if you get an exception in the method, you're just printing it out and continuing merrily... so your stmt variable would still be null. Don't catch Exception in general, and don't catch exceptions that you really can't continue after.

Upvotes: 5

JTMon
JTMon

Reputation: 3199

You have to call the DBConnect method to initialise the stmt variable beofre using it.

Upvotes: 0

sakthisundar
sakthisundar

Reputation: 3288

Your stamt variable might have been initialized globally with null, but you would have failed to assign the value which you have to acquire from connection. Checkout your code.

Upvotes: 0

Anthony Grist
Anthony Grist

Reputation: 38345

Pretty simple: stmt hasn't been initialised.

Upvotes: 2

Related Questions