0
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
  PreparedStatement p1;
   try {
       System.out.println("works");
       String s1="insert into reg(num,name) values(?,?)";
      p1 = conn.prepareStatement(s1);
      System.out.println("Works");
      JOptionPane.showMessageDialog(this, "Statement prepared");

   p1.setString(1,num.getText());
   p1.setString(2, name.getText());
   p1.executeUpdate();
   JOptionPane.showMessageDialog(this, "Inserted");
    }
 catch (SQLException ex) {
 JOptionPane.showMessageDialog(this, "NOT Inserted");
        Logger.getLogger(sample.class.getName()).log(Level.SEVERE, null, ex);
    }

    // TODO add your handling code here:
}                                        

This is my insert module.. This works in my friend's laptop. But not in mine :( I get the following error:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException at sample.jButton1ActionPerformed(sample.java:197) at sample.access$200(sample.java:20) at sample$3.actionPerformed(sample.java:92) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236) at java.awt.Component.processMouseEvent(Component.java:6263) at javax.swing.JComponent.processMouseEvent(JComponent.java:3267) at java.awt.Component.processEvent(Component.java:6028) at java.awt.Container.processEvent(Container.java:2041) at java.awt.Component.dispatchEventImpl(Component.java:4630) at java.awt.Container.dispatchEventImpl(Container.java:2099) at java.awt.Component.dispatchEvent(Component.java:4460) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168) at java.awt.Container.dispatchEventImpl(Container.java:2085) at java.awt.Window.dispatchEventImpl(Window.java:2478) at java.awt.Component.dispatchEvent(Component.java:4460) at java.awt.EventQueue.dispatchEvent(EventQueue.java:599) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161) at java.awt.EventDispatchThread.run(EventDispatchThread.java:122) Java Result: 1

PS: I am totally new to java. Is it a problem with my ODBC?

Created connection in the constructor(sample()):

public sample() {
    initComponents();
    try
    {
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    }
    catch(ClassNotFoundException ex)
    {
       JOptionPane.showMessageDialog(this, "Error!");
    }


    try
    {
    Connection conn=DriverManager.getConnection("jdbc:odbc:reg","system","suganthi");
    if(conn!=null)
    JOptionPane.showMessageDialog(this, "Connected!");
    }
    catch(SQLException ex)
    {

        System.out.println("Error");
    }
}
vkraemer
  • 9,864
  • 2
  • 30
  • 44
enthudrives
  • 1
  • 1
  • 2

2 Answers2

3

EDIT: You still haven't indicated which is line 197 in the question, but I'll assume it's

p1 = conn.prepareStatement(s1);

This is almost certainly due to this bit of the constructor:

Connection conn=DriverManager.getConnection("jdbc:odbc:reg","system","suganthi");

This declares a local variable called conn. Presumably you also have an instance variable called conn, but the local variable is hiding it. You're assigning to the local variable, which means the instance variable is going to keep its default value of null. You probably meant just:

conn = DriverManager.getConnection("jdbc:odbc:reg","system","suganthi");

However, if an exception occurs you shouldn't just print "Error" and keep going... you should probably throw an exception from the constructor instead. After all, the instance isn't going to behave properly unless you've got a database connection.

You should also consider only creating a database connection when you actually need it, and closing it immediately afterwards. Use a connection pool to allow this to be efficient where appropriate.


Original answer

You haven't shown the bit of code which is throwing the exception - namely jButton1ActionPerformed, with line 197 being the culprit. You've shown us jButton3ActionPerformed instead.

Show us the right piece of code, with line numbers, and we're more likely to have a chance to help you. Or just look at what's being used on line 197 - something there is resulting in a null reference which you're trying to dereference, e.g.

int foo = someNullValue.getIntValue();

It may be the result of a method call though, e.g.

foo().getIntValue(); // Will throw if `foo()` returns null

As an aside, doing database work in the UI thread isn't generally a good idea - although as you're a beginner it may be simpler to get that right and live with the UI hanging during database access than getting multithreading right. You should consider threading it properly at a later date though, when you have more experience.

Jon Skeet
  • 1,421,763
  • 867
  • 9,128
  • 9,194
  • private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { PreparedStatement p1; try { System.out.println("works"); String s1="insert into reg(num,name) values(?,?)"; p1 = conn.prepareStatement(s1);// line 197 JOptionPane.showMessageDialog(this, "Statement prepared"); p1.setString(1,num.getText()); p1.setString(2, name.getText()); p1.executeUpdate(); } catch (SQLException ex) { Logger.getLogger(sample.class.getName()).log(Level.SEVERE, null, ex); } } both jbutton1 and jbutton2 do the same task. So copied code by mistake. – enthudrives Apr 03 '10 at 11:24
  • @enthudrives: Please edit your question rather than putting code in a comment. It's basically unreadable in a comment. – Jon Skeet Apr 03 '10 at 11:29
1

the exception form jButton1ActionPerformed function not in jButton3ActionPerformed ,

make sure that Connection object have value and you already connected to data base.

Wajdy Essam
  • 4,280
  • 3
  • 28
  • 33
  • public sample() { initComponents(); try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); } catch(ClassNotFoundException ex) { JOptionPane.showMessageDialog(this, "Error!"); } try { Connection conn=DriverManager.getConnection("jdbc:odbc:reg","system","passwd"); if(conn!=null) JOptionPane.showMessageDialog(this, "Connected!"); } catch(SQLException ex) { System.out.println("Error"); } } My connection is established – enthudrives Apr 03 '10 at 11:27
  • your connection is defined inside constructor when constructor end then your reference is out of life so define Connection outside constructor – Wajdy Essam Apr 03 '10 at 11:54