2015-06-27 2 views
0

Я продолжаю получать исключение NullPointerException при попытке запустить приложение Java. Кажется, проблема связана с кодом PreparedStatement.MySQL PreparedStatement NullPointerException

Вот мой код

Connection mc = null; 
    /** 
    * Create the application. 
    */ 
    public GUI() { 
     mc = DB.getConnection(); 
     initialize(); 
    } 

    /** 
    * Initialize the contents of the frame. 
    */ 
    private void initialize() { 
     frame = new JFrame(); 
     frame.setBounds(100, 100, 795, 486); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.getContentPane().setLayout(null); 

     JButton btnNewButton = new JButton("Forecast Data"); 
     btnNewButton.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent arg0) { 

       try { 
        String query = "Select * from db"; 
        PreparedStatement pst = mc.prepareStatement (query); 
        ResultSet rs = pst.executeQuery(); 
        table.setModel(DbUtils.resultSetToTableModel(rs)); 
       }catch (Exception e){ 
        e.printStackTrace(); 
       } 
      } 
     }); 

и это StackTrace

java.lang.NullPointerException 
    at GUI$2.actionPerformed(GUI.java:63) 
    at javax.swing.AbstractButton.fireActionPerformed(Unknown Source) 
    at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source) 
    at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source) 
    at javax.swing.DefaultButtonModel.setPressed(Unknown Source) 
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source) 
    at java.awt.Component.processMouseEvent(Unknown Source) 
    at javax.swing.JComponent.processMouseEvent(Unknown Source) 
    at java.awt.Component.processEvent(Unknown Source) 
    at java.awt.Container.processEvent(Unknown Source) 
    at java.awt.Component.dispatchEventImpl(Unknown Source) 
    at java.awt.Container.dispatchEventImpl(Unknown Source) 
    at java.awt.Component.dispatchEvent(Unknown Source) 
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source) 
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source) 
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source) 
    at java.awt.Container.dispatchEventImpl(Unknown Source) 
    at java.awt.Window.dispatchEventImpl(Unknown Source) 
    at java.awt.Component.dispatchEvent(Unknown Source) 
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source) 
    at java.awt.EventQueue.access$400(Unknown Source) 
    at java.awt.EventQueue$3.run(Unknown Source) 
    at java.awt.EventQueue$3.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) 
    at java.awt.EventQueue$4.run(Unknown Source) 
    at java.awt.EventQueue$4.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) 
    at java.awt.EventQueue.dispatchEvent(Unknown Source) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
    at java.awt.EventDispatchThread.run(Unknown Source) 

Это мой DB класс

public class DB { 

    public static void main (String[]args) { 
      getConnection(); 
     } 

     public static Connection getConnection(){ 
      String uRl = "jdbc:mysql://localhost:3306/weather"; 
      String user = "root"; 
      String password = "0888150"; 
      try { 
       String driver ="com.mysql.jdbc.Driver"; 
       Class.forName(driver); 

       Connection mycon = DriverManager.getConnection(uRl,user,password); 
       Statement st = mycon.createStatement(); 
       ResultSet rs = st.executeQuery("SELECT * FROM db"); 
       while(rs.next()){ 
        System.out.println(rs.getString("City")+", "+rs.getString("date")+ ", "+rs.getString("Low")+ ", "+ 
       rs.getString("High")+", " +rs.getString("status")); 
       } 

      }catch(Exception ex){ 
       ex.printStackTrace(); 
      } 
      return null; 

     } 
     } 
+0

Какая линия составляет 63? И как инициализируется 'mc'? – Mureinik

+0

Строка 63 - это PreparedStatement pst = mc.prepareStatement (запрос); – Solo

+0

Yup, похоже, 'mc' не инициализируется. – Mureinik

ответ

1

Посмотрите, как DB.getConnection(); возвращается null.

Вы можете поделиться кодом getConnection() в классе DB и распечатать значение mc с помощью System.out.println(mc)?

Ok. Вы всегда возвращаетесь null, смените свой DB.java на класс ниже.

public class DB { 

public static void main (String[]args) { 
     getConnection(); 
    } 

    public static Connection getConnection(){ 
     String uRl = "jdbc:mysql://localhost:3306/weather"; 
     String user = "root"; 
     String password = "0888150"; 
     Connection mycon = null; 
     try { 
      String driver ="com.mysql.jdbc.Driver"; 
      Class.forName(driver); 

      mycon = DriverManager.getConnection(uRl,user,password); 
      Statement st = mycon.createStatement(); 
      ResultSet rs = st.executeQuery("SELECT * FROM db"); 
      while(rs.next()){ 
       System.out.println(rs.getString("City")+", "+rs.getString("date")+ ", "+rs.getString("Low")+ ", "+ 
      rs.getString("High")+", " +rs.getString("status")); 
      } 

     }catch(Exception ex){ 
      ex.printStackTrace(); 
     } 
     return mycon; 

    } 
    } 
+0

Я добавил свой класс DB, а также system.out.println (mc) возвращает null – Solo

+0

Большое спасибо. Он работает сейчас :) – Solo

+0

Кроме того, не забудьте принять ваши ответы (все они), если они дали вам удовлетворительные ответы (нажав на отметку слева от ответов), было бы полезно сообществу – TheCodingFrog

Смежные вопросы