2014-11-08 4 views
1

Кажется, что есть проблема с функцией, над которой я работаю. Я использую JDBC и код заключается в следующем:java.lang.NullPointerException при попытке использовать jdbc

public String[] getAllFoodOrders() throws Exception{ 
      String[] foodordersstringarray = null; 
      byte i = 0; 

      Statement myStmt = null; 
      ResultSet myRs = null; 

      try { 
       myStmt = myConn.createStatement(); 
       myRs = myStmt.executeQuery("SELECT description FROM orders,menu WHERE code = menu_CODE"); 

       while (myRs.next()) { 
        foodordersstringarray[i++] = myRs.getString("description"); 
       } 
      } 
       finally{ 
         close(myStmt, myRs); 
         } 

      return foodordersstringarray; 
     } 

Исключение выбрасывается в отчете в то время как в строке:

"foodordersstringarray [я ++] = myRs.getString (" Описание ");"

код всего класса, содержащего указанный выше способ заключается в следующем:

/* 
* To change this license header, choose License Headers in Project Properties. 
* To change this template file, choose Tools | Templates 
* and open the template in the editor. 
*/ 
package MySQLDatabaseManagement; 

import java.io.FileNotFoundException; 
import java.io.IOException; 
import java.sql.Connection; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
import java.sql.Statement; 

/** 
* 
* @author localhost 
*/ 
public class AdminExportToPDFOrXMLSQLManagement { 
     private final Connection myConn; 

    public AdminExportToPDFOrXMLSQLManagement() throws SQLException,FileNotFoundException,IOException{ 

      //partea cu conexiunea tabelului 
      myConn = ConnectToDatabase.getConnection(); 
      //partea cu conexiunea la tabel 
    } 
     public String[] getAllFoodOrders() throws Exception{ 
      String[] foodordersstringarray = null; 
      byte i = 0; 

      Statement myStmt = null; 
      ResultSet myRs = null; 

      try { 
       myStmt = myConn.createStatement(); 
       myRs = myStmt.executeQuery("SELECT description FROM orders,menu WHERE code = menu_CODE"); 

       while (myRs.next()) { 
        foodordersstringarray[i++] = myRs.getString("description"); 
       } 
      } 
       finally{ 
         close(myStmt, myRs); 
         } 

      return foodordersstringarray; 
     } 

    private static void close(Connection myConn, Statement myStmt, ResultSet myRs) throws SQLException { 

     if (myRs != null) { 
      myRs.close(); 
     } 
     if (myConn != null) { 
      myConn.close(); 
     } 
    } 

    private void close(Statement myStmt, ResultSet myRs) throws SQLException { 
     close(null, myStmt, myRs);  
    } 
} 

Трассировка стека является следующее:

java.lang.NullPointerException 
    at MySQLDatabaseManagement.AdminExportToPDFOrXMLSQLManagement.getAllFoodOrders(AdminExportToPDFOrXMLSQLManagement.java:40) 
    at xml.MySAXWriter.<init>(MySAXWriter.java:26) 
    at Listeners.AdminExportToPDFOrXMListener.ExportToXML(AdminExportToPDFOrXMListener.java:35) 
    at Listeners.AdminExportToPDFOrXMListener.actionPerformed(AdminExportToPDFOrXMListener.java:54) 
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022) 
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2346) 
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) 
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) 
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252) 
    at java.awt.Component.processMouseEvent(Component.java:6525) 
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3322) 
    at java.awt.Component.processEvent(Component.java:6290) 
    at java.awt.Container.processEvent(Container.java:2234) 
    at java.awt.Component.dispatchEventImpl(Component.java:4881) 
    at java.awt.Container.dispatchEventImpl(Container.java:2292) 
    at java.awt.Component.dispatchEvent(Component.java:4703) 
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4898) 
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4533) 
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4462) 
    at java.awt.Container.dispatchEventImpl(Container.java:2278) 
    at java.awt.Window.dispatchEventImpl(Window.java:2739) 
    at java.awt.Component.dispatchEvent(Component.java:4703) 
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:751) 
    at java.awt.EventQueue.access$500(EventQueue.java:97) 
    at java.awt.EventQueue$3.run(EventQueue.java:702) 
    at java.awt.EventQueue$3.run(EventQueue.java:696) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:86) 
    at java.awt.EventQueue$4.run(EventQueue.java:724) 
    at java.awt.EventQueue$4.run(EventQueue.java:722) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75) 
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:721) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) 
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82) 

Не могли бы вы рассказать, что я делаю неправильно? Спасибо заранее!

ответ

1

Массив foodordersstringarray не инициализирован. Он должен быть создан с определенным размером. Если вы не знаете размер, чтобы указать, заполнить результаты в List, а затем преобразовать List в массив:

List<String> foodorderList = new ArrayList<String>(); 
... 

try { 
    myStmt = myConn.createStatement(); 
    myRs = myStmt.executeQuery("SELECT description FROM orders,menu WHERE code = menu_CODE"); 

    while (myRs.next()) { 
     foodorderList.add(myRs.getString("description")); 
    } 
} 
finally{ 
    close(myStmt, myRs); 
} 
return foodorderList.toArray(new String[1]); 
+1

Правильный ответ. Кстати, 'массив foodordersstringarray не инициализирован' - он *** инициализирован *** значением' null'. – BackSlash

+0

Прошу прощения за этот вопрос. :( – Andrei

+0

@ Андреа не волнуйся –

0

Вы Строка массива является нулем, как показано ниже, следовательно, исключения нулевого указателя.

String[] foodordersstringarray = null; 

Если вы уверены, что я собираюсь сказать, 1000 или менее запись использовать его как:

String[] foodordersstringarray = new String[1000]; 

Есть шансы памяти убыли здесь. Я хотел бы предложить вам, используя список здесь вместо массива, как показано ниже:

List<String> foodOrderList = new LinkedList<String>(); 

и вместо:

foodordersstringarray[i++] = myRs.getString("description"); 

ли

foodOrderList.add(myRs.getString("description")); 

И в конце этого метода вы могли бы сделать

return (String[]) foodOrderList.toArray();//will return Object[] 
Смежные вопросы