JDBC ODBC .. (Исключение в потоке "AWT-EventQueue-0" java.lang.NullPointerException) - PullRequest
0 голосов
/ 03 апреля 2010
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:
}                                        

Это мой вставной модуль. Это работает на ноутбуке моего друга. Но не по моему :( Я получаю следующую ошибку:

Исключение в потоке "AWT-EventQueue-0" java.lang.NullPointerException at sample.jButton1ActionPerformed (sample.java:197) в sample.access $ 200 (sample.java:20) в образце $ 3.actionPerformed (sample.java:92) в javax.swing.AbstractButton.fireActionPerformed (AbstractButton.java:1995) в javax.swing.AbstractButton $ Handler.actionPerformed (AbstractButton.java:2318) в javax.swing.DefaultButtonModel.fireActionPerformed (DefaultButtonModel.java:387) в javax.swing.DefaultButtonModel.setPressed (DefaultButtonModel.java:242) в javax.swing.plaf.basic.BasicButtonListener.mouseReleased (BasicButtonListener.java:236) в java.awt.Component.processMouseEvent (Component.java:6263) в javax.swing.JComponent.processMouseEvent (JComponent.java:3267) в java.awt.Component.processEvent (Component.java:6028) в java.awt.Container.processEvent (Container.java:2041) в java.awt.Component.dispatchEventImpl (Component.java:4630) в java.awt.Container.dispatchEventImpl (Container.java:2099) в java.awt.Component.dispatchEvent (Component.java:4460) в java.awt.LightweightDispatcher.retargetMouseEvent (Container.java:4574) в java.awt.LightweightDispatcher.processMouseEvent (Container.java:4238) в java.awt.LightweightDispatcher.dispatchEvent (Container.java:4168) в java.awt.Container.dispatchEventImpl (Container.java:2085) в java.awt.Window.dispatchEventImpl (Window.java:2478) в java.awt.Component.dispatchEvent (Component.java:4460) в java.awt.EventQueue.dispatchEvent (EventQueue.java:599) в java.awt.EventDispatchThread.pumpOneEventForFilters (EventDispatchThread.java:269) в java.awt.EventDispatchThread.pumpEventsForFilter (EventDispatchThread.java:184) в java.awt.EventDispatchThread.pumpEventsForHierarchy (EventDispatchThread.java:174) в java.awt.EventDispatchThread.pumpEvents (EventDispatchThread.java:169) в java.awt.EventDispatchThread.pumpEvents (EventDispatchThread.java:161) в java.awt.EventDispatchThread.run (EventDispatchThread.java:122) Результат Java: 1

PS: я совершенно новичок в Java. Это проблема с моим ODBC?

Создано соединение в конструкторе (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");
    }
}

Ответы [ 2 ]

3 голосов
/ 03 апреля 2010

РЕДАКТИРОВАТЬ: Вы все еще не указали, какая строка 197 в вопросе, но я предполагаю, что это

p1 = conn.prepareStatement(s1);

Это почти наверняка из-за этого бита конструктора:

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

Здесь объявляется локальная переменная с именем conn. Предположительно, у вас также есть переменная instance с именем conn, но локальная переменная скрывает ее. Вы присваиваете локальную переменную, что означает, что переменная экземпляра будет иметь значение по умолчанию, равное нулю. Вы, вероятно, имели в виду только:

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

Однако, если возникает исключение, вы не должны просто печатать «Ошибка» и продолжать работу ... вы, вероятно, должны вместо этого выбросить исключение из конструктора. В конце концов, экземпляр не будет работать должным образом, если у вас нет подключения к базе данных.

Вам также следует рассмотреть возможность создания соединения с базой данных только тогда, когда оно вам действительно нужно, и немедленного его закрытия. Используйте пул соединений, чтобы позволить этому быть эффективным там, где это необходимо.


Оригинальный ответ

Вы не показали фрагмент кода, который вызывает исключение, а именно jButton1ActionPerformed, причем строка 197 является виновником. Вы показали нам jButton3ActionPerformed вместо.

Покажите нам правильный фрагмент кода с номерами строк, и у нас больше шансов помочь вам. Или просто посмотрите, что используется в строке 197 - что-то там приводит к пустой ссылке, которую вы пытаетесь разыменовать, например,

int foo = someNullValue.getIntValue();

Это может быть результат вызова метода, например,

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

Кроме того, выполнение работы с базой данных в потоке пользовательского интерфейса, как правило, не является хорошей идеей - хотя, будучи новичком, может быть проще получить правильное решение и жить с зависанием пользовательского интерфейса при доступе к базе данных, чем получить многопоточность , Тем не менее, вам следует подумать о том, чтобы правильно его заправить, когда у вас появится больше опыта.

1 голос
/ 03 апреля 2010

исключительная форма jButton1ActionPerformed функция отсутствует в jButton3ActionPerformed,

убедитесь, что объект Connection имеет значение и вы уже подключены к базе данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...