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");
}
}
Best Answer
EDIT: You still haven't indicated which is line 197 in the question, but I'll assume it's
This is almost certainly due to this bit of the constructor:
This declares a local variable called
conn
. Presumably you also have an instance variable calledconn
, 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: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 usjButton3ActionPerformed
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.
It may be the result of a method call though, e.g.
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.