尝试使用jdbc时出现java.lang.NullPointerException

尝试使用jdbc时出现java.lang.NullPointerException,java,jdbc,nullpointerexception,Java,Jdbc,Nullpointerexception,我正在处理的函数似乎有问题。我使用JDBC,代码如下: public String[] getAllFoodOrders() throws Exception{ String[] foodordersstringarray = null; byte i = 0; Statement myStmt = null; ResultSet myRs = null; try {

我正在处理的函数似乎有问题。我使用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;
        }
/*
 * 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)
异常在while语句的行中引发:

“foodordersstringaray[i++]=myRs.getString(“说明”)

包含上述方法的整个类的代码如下所示:

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;
        }
/*
 * 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)
堆栈跟踪如下所示:

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;
        }
/*
 * 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)
java.lang.NullPointerException
在MySQLDatabaseManagement.AdminExportToPDFOrXMLSQLManagement.getAllFoodOrders(AdminExportToPDFOrXMLSQLManagement.java:40)
位于xml.MySAXWriter(MySAXWriter.java:26)
在Listeners.adminExportTopdForXmlListener.ExportToXML(adminExportTopdForXmlListener.java:35)
在Listeners.AdminExportTopdForXmlListener.actionPerformed(AdminExportTopdForXmlListener.java:54)
在javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
位于javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2346)
在javax.swing.DefaultButtonModel.fireActionPerformed上(DefaultButtonModel.java:402)
在javax.swing.DefaultButtonModel.setPressed中(DefaultButtonModel.java:259)
在javax.swing.plaf.basic.BasicButtonListener.MouseRelease(BasicButtonListener.java:252)
位于java.awt.Component.ProcessMouseeEvent(Component.java:6525)
位于javax.swing.JComponent.ProcessMouseeEvent(JComponent.java:3322)
位于java.awt.Component.processEvent(Component.java:6290)
位于java.awt.Container.processEvent(Container.java:2234)
位于java.awt.Component.dispatchEventImpl(Component.java:4881)
位于java.awt.Container.dispatchEventImpl(Container.java:2292)
位于java.awt.Component.dispatchEvent(Component.java:4703)
位于java.awt.LightweightDispatcher.RetargetMouseeEvent(Container.java:4898)
位于java.awt.LightweightDispatcher.ProcessMouseeEvent(Container.java:4533)
位于java.awt.LightweightDispatcher.dispatchEvent(Container.java:4462)
位于java.awt.Container.dispatchEventImpl(Container.java:2278)
位于java.awt.Window.dispatchEventImpl(Window.java:2739)
位于java.awt.Component.dispatchEvent(Component.java:4703)
位于java.awt.EventQueue.dispatchEventImpl(EventQueue.java:751)
在java.awt.EventQueue.access$500(EventQueue.java:97)
在java.awt.EventQueue$3.run(EventQueue.java:702)
在java.awt.EventQueue$3.run(EventQueue.java:696)
位于java.security.AccessController.doPrivileged(本机方法)
位于java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
位于java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:86)
在java.awt.EventQueue$4.run(EventQueue.java:724)
在java.awt.EventQueue$4.run(EventQueue.java:722)
位于java.security.AccessController.doPrivileged(本机方法)
位于java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
位于java.awt.EventQueue.dispatchEvent(EventQueue.java:721)
位于java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
在java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)中
位于java.awt.EventDispatchThread.PumpeEventsforHierarchy(EventDispatchThread.java:105)
位于java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
位于java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
在java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
你能告诉我我做错了什么吗?
提前谢谢你

未初始化数组
foodordersstringaray
。它应该以一定的大小创建。如果不知道要指定的大小,请将结果填入
列表
,然后将
列表
转换为数组:

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]);
List foodorderList=newArrayList();
...
试一试{
myStmt=myConn.createStatement();
myRs=myStmt.executeQuery(“从订单中选择描述,其中菜单代码=菜单代码”);
while(myRs.next()){
添加(myRs.getString(“description”);
}
}
最后{
关闭(myStmt,myRs);
}
返回foodorderList.toArray(新字符串[1]);

您的字符串数组如下所示为空,因此出现空指针异常

String[] foodordersstringarray = null;
如果您确定我将获得1000张或更少的唱片,请使用如下方式:

String[] foodordersstringarray = new String[1000];
这里存在内存浪费的可能性。我建议您在此处使用列表而不是如下所示的数组:

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

在这个方法的最后,你可以

return (String[]) foodOrderList.toArray();//will return Object[]

回答正确。顺便说一下,
数组foodOrderssTringray未初始化
-它已初始化为
null
。很抱歉问这个问题:(