在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()打印了异常,但它仍然不工作。看起来像是