Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在try-catch块内执行SQL查询时发生java.lang.NullPointerException错误_Java_Mysql_Exception Handling_Nullpointerexception_Try Catch - Fatal编程技术网

在try-catch块内执行SQL查询时发生java.lang.NullPointerException错误

在try-catch块内执行SQL查询时发生java.lang.NullPointerException错误,java,mysql,exception-handling,nullpointerexception,try-catch,Java,Mysql,Exception Handling,Nullpointerexception,Try Catch,我在运行程序时遇到java.lang.NullPointerException错误。错误似乎出现在try块内: rs=st.executeQuery(查询) 下面的Java代码中的方法regcustomers。请检查我的代码并帮助我理解我做错了什么 import java.io.IOException; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import javax

我在运行程序时遇到
java.lang.NullPointerException
错误。错误似乎出现在try块内:
rs=st.executeQuery(查询)
下面的Java代码中的方法
regcustomers
。请检查我的代码并帮助我理解我做错了什么

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

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.vastika.serlvet.dao.ConnectionDb;

public class RegistrationServlet extends HttpServlet {
    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest req, HttpServletResponse res)
            throws ServletException, IOException {
        // Read the data
        String name = req.getParameter("name");
        String email = req.getParameter("email");
        String line1 = req.getParameter("addressline1");
        String city = req.getParameter("city");
        String state = req.getParameter("state");
        String country = req.getParameter("country");
        String userid = req.getParameter("username");
        String password = req.getParameter("password");
        insertToDatabase(name, email, line1, city, state, country, userid,
                password);
        // Forward to Shopping page
        req.getRequestDispatcher("shop.html").forward(req, res);
    }

    private void insertToDatabase(String name, String email, String line1,
            String city, String state, String country, String userid,
            String password) {

        ConnectionDb con = new ConnectionDb();
        Statement st = con.makeConnection();
        ResultSet rs = null;
        String query = "insert into regcustomers (Name, Email, Address, City, State, Country, Username, Password) values("+"'"+name+"'"+","+"'"+email+"'"+","+"'"+line1+"'"+","+"'"+city+"'"+","+"'"+state+"'"+","+"'"+country+"'"+","+"'"+userid+"'"+","+"'"+password+"'"+");";

        System.out.println(query);

        try {
            rs = st.executeQuery(query);
            System.out.println(rs.getRow());
            } 
        catch (SQLException e) {
            e.printStackTrace();        
            }

    }
}


不需要放分号

String query = "insert into regcustomers (Name, Email, Address, City, State, Country, Username, Password) values("+"'"+name+"'"+","+"'"+email+"'"+","+"'"+line1+"'"+","+"'"+city+"'"+","+"'"+state+"'"+","+"'"+country+"'"+","+"'"+userid+"'"+","+"'"+password+"'"+")";
当您点击
SELECT
query时,它将返回
ResultSet

删除
ResultSet
声明

Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/DATABASENAME", "root", "");
Statement st = con.createStatement();

使用
int count=st.executeUpdate()

不需要放分号

String query = "insert into regcustomers (Name, Email, Address, City, State, Country, Username, Password) values("+"'"+name+"'"+","+"'"+email+"'"+","+"'"+line1+"'"+","+"'"+city+"'"+","+"'"+state+"'"+","+"'"+country+"'"+","+"'"+userid+"'"+","+"'"+password+"'"+")";
当您点击
SELECT
query时,它将返回
ResultSet

删除
ResultSet
声明

Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/DATABASENAME", "root", "");
Statement st = con.createStatement();
使用
int count=st.executeUpdate()

您可以尝试执行以下操作:

private void insertToDatabase(String name, String email, String line1,
            String city, String state, String country, String userid,
            String password) {

        ConnectionDb con = new ConnectionDb();
        Statement st = con.makeConnection();
        ResultSet rs = null;
        String query = "insert into regcustomers (Name, Email, Address, City, State, Country, Username, Password) values(?,?,?,?,?,?,?,?)";
        st.setString(1,name);
        st.setString(2,email);
        st.setString(3,line1);
        st.setString(4,street);
        st.setString(5,state);
        st.setString(6,country);
        st.setString(7,userid);
        st.setString(8,passwoname);

        try {
            int flag = st.executeUpdate(query);
            } 
        catch (SQLException e) {
            e.printStackTrace();        
            }

    }
我认为你想做的不是询问,而是更新。因此,不是:

rs = st.executeQuery(query);
您可以执行以下操作:

int flag = st.executeUpdate(query);
请参阅以获取更多信息

Att:u有一个空指针异常,因为(可能)
rs=st.executeQuery(查询)不检索任何内容

希望它有帮助^^

您可以尝试这样做:

private void insertToDatabase(String name, String email, String line1,
            String city, String state, String country, String userid,
            String password) {

        ConnectionDb con = new ConnectionDb();
        Statement st = con.makeConnection();
        ResultSet rs = null;
        String query = "insert into regcustomers (Name, Email, Address, City, State, Country, Username, Password) values(?,?,?,?,?,?,?,?)";
        st.setString(1,name);
        st.setString(2,email);
        st.setString(3,line1);
        st.setString(4,street);
        st.setString(5,state);
        st.setString(6,country);
        st.setString(7,userid);
        st.setString(8,passwoname);

        try {
            int flag = st.executeUpdate(query);
            } 
        catch (SQLException e) {
            e.printStackTrace();        
            }

    }
我认为你想做的不是询问,而是更新。因此,不是:

rs = st.executeQuery(query);
您可以执行以下操作:

int flag = st.executeUpdate(query);
请参阅以获取更多信息

Att:u有一个空指针异常,因为(可能)
rs=st.executeQuery(查询)不检索任何内容


希望能有所帮助^ ^

发生的事情是,您在以下代码中遇到异常

public Statement makeConnection() {
    Connection conn = null;
    Statement st = null;
    try {
        Class.forName("com.mysql.jdbc.Driver");
        conn = DriverManager.getConnection(
                "jdbc:mysql://localhost:3306/onlineshopping", "root",
                "test");
        st = conn.createStatement();
    } catch (Exception e) {
        e.getStackTrace();
    }
    return st;
}
然后返回
st
,它是
null
,因为代码从未到达
conn.createStatement()

顺便说一下,您实际上并没有打印
异常。使用
e.printStackTrace()


此外,您还应该实际处理异常。

发生的情况是,您在以下代码中遇到异常

public Statement makeConnection() {
    Connection conn = null;
    Statement st = null;
    try {
        Class.forName("com.mysql.jdbc.Driver");
        conn = DriverManager.getConnection(
                "jdbc:mysql://localhost:3306/onlineshopping", "root",
                "test");
        st = conn.createStatement();
    } catch (Exception e) {
        e.getStackTrace();
    }
    return st;
}
然后返回
st
,它是
null
,因为代码从未到达
conn.createStatement()

顺便说一下,您实际上并没有打印
异常。使用
e.printStackTrace()


此外,您还应该实际处理异常。

在try-catch块内执行SQL查询时触发java.lang.NullPointerException错误时,会出现一种奇怪的情况。 查询将更新多个JComboBox中选定的索引。 这些JComboxes最初链接为根据shema手动更新索引:

private void PriorityLoad6ActionPerformed(java.awt.event.ActionEvent evt) {                                              
        // TODO add your handling code here:
        NewSelectedIndex = PriorityLoad6.getSelectedIndex(); SetNewIndexes();
    } 
在这种情况下,当使用简单的

PriorityLoad6.setSelectedIndex(rs.getInt("PriorityLoad_6"));
触发上述错误。 在这种情况下,一种解决方案是使用if“隔离”内部代码,if在查询期间不活动。例如:

private void PriorityLoad6ActionPerformed(java.awt.event.ActionEvent evt) {                                              
                if (SaveSettings.hasFocus() == false){NewSelectedIndex = PriorityLoad6.getSelectedIndex(); SetNewIndexes();}}
当然,在采取这一行动之前,应适当放置:

SaveSettings.requestFocus();

在调用mysql查询之前。

在try-catch块内执行SQL查询时,会触发java.lang.NullPointerException错误,这是一种奇怪的情况。 查询将更新多个JComboBox中选定的索引。 这些JComboxes最初链接为根据shema手动更新索引:

private void PriorityLoad6ActionPerformed(java.awt.event.ActionEvent evt) {                                              
        // TODO add your handling code here:
        NewSelectedIndex = PriorityLoad6.getSelectedIndex(); SetNewIndexes();
    } 
在这种情况下,当使用简单的

PriorityLoad6.setSelectedIndex(rs.getInt("PriorityLoad_6"));
触发上述错误。 在这种情况下,一种解决方案是使用if“隔离”内部代码,if在查询期间不活动。例如:

private void PriorityLoad6ActionPerformed(java.awt.event.ActionEvent evt) {                                              
                if (SaveSettings.hasFocus() == false){NewSelectedIndex = PriorityLoad6.getSelectedIndex(); SetNewIndexes();}}
当然,在采取这一行动之前,应适当放置:

SaveSettings.requestFocus();


调用mysql查询之前。

con.makeConnection()做什么?con.makeConnection()做什么?如果可能的话,请发布所有相关代码。并确保异常归咎于您认为有问题的行。添加异常会很好(并指出行)。您应该将
regcustomers
更改为
regcustomer
。快速评论:研究参数化参数。您的代码似乎容易受到sql注入的攻击。
con.makeConnection()
做什么?con.makeConnection()做什么?如果可能的话,请发布所有相关代码。并确保异常归咎于您认为有问题的行。添加异常会很好(并指出行)。您应该将
regcustomers
更改为
regcustomer
。快速评论:研究参数化参数。您的代码似乎容易受到sql注入的攻击。我不能使用setString,因为它对于语句类型是未定义的。对此有何想法?很抱歉,您可以使用
PreparedStatement
,而不是
station
。@Cold executeQuery(query)不能返回null,因此它不会导致NullPointerException。refI无法使用setString,因为它未定义为语句类型。对此有何想法?很抱歉,您可以使用
PreparedStatement
,而不是
station
。@Cold executeQuery(query)不能返回null,因此它不会导致NullPointerException。refI使用e.printStackTrace()打印了异常,但它仍然不工作。代码在到达try块内的点(rs=st.executeQuery(query))之前似乎工作正常,这意味着makeConnection似乎正在工作。但还不确定是什么导致它出现空指针异常。我的回答解释了这一点,因为出现了异常
makeConnection()
正在返回
null
。它显示了什么异常?这是控制台出现的情况:严重:路径为[/OnlineShopping]的上下文中Servlet[RegistrationServlet]的Servlet.service()抛出异常java.lang.NullPointerException,位于com.vastika.servlets.RegistrationServlet.insertToDatabase(RegistrationServlet.java:51)@prince2369这就是NPE。在
makeConnection()
中捕获的异常是什么意思?我使用e.printStackTrace()打印了异常,但它仍然不工作。看起来像是