有没有另一种方法可以在不抛出空点异常的情况下访问结果集
Is there another way to acess resultset without throwing a null point exception
我正在尝试从 select 查询获取的单个行中访问数据。当我尝试通过 rs.getString()
访问数据时,它会抛出 NullPointerException
.
从结果集中访问数据的任何方法都会导致 NullPointerException
。为什么会这样?
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
boolean status=true;
String email=request.getParameter("user");
String password=request.getParameter("pass");
PrintWriter pw = response.getWriter();
if (status) {
String driverName = "org.hsqldb.jdbcDriver";
String URL = "jdbc:hsqldb:hsql://localhost/";
String UID = "SA";
String PWD = "";
Connection con = null;
PreparedStatement sql = null;
ResultSet rs = null;
try {
Class.forName(driverName);
con = DriverManager.getConnection(URL, UID, PWD);
System.out.println("connected = " + con);
sql = con.prepareStatement("SELECT * FROM \"USER\" where email='"+email+"' and password='"+password+"'");
boolean sql_st=sql.execute();
System.out.println(sql_st);
rs=sql.getResultSet();
if(rs.next())
{
HttpSession hp = request.getSession(true);
rs=sql.getResultSet();
hp.setAttribute("name", rs.getString("name"));
pw.println("<html><body><h1>Welcome "+rs.getString("name")+"</h1></body></html>");
}
else
{
pw.println("<html><body><h1>invalid credentials</h1></body></html>");
pw.println("<html><body><a href=login.html>go back</a></body></html>");
}
} catch (SQLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
else
{
pw.println("<html><body><h1>Invalid Input</h1></body></html>");
pw.println("<html><body><a href=register.html>go back</a></body></html>");
}
你已经写了两次rs=sql.getResultSet();
,这就是它return null
的原因,尝试像下面这样使用PreparedStatement :
PreparedStatement ps= con.prepareStatement("SELECT * FROM USER where
email=? and password=?");
//putting value for placeholder (?)
ps.setString(1,email);
ps.setString(2,password);
ResultSet resultset= ps.executeQuery();
//if there is row exist then do below
if(resultset.next()){
HttpSession hp = request.getSession(true);
hp.setAttribute("name", resultset.getString("name"));
//getting name
pw.println("<html><body><h1>Welcome "+resultset.getString("name")+"</h1></body></html>");
} else {
pw.println("<html><body><h1>invalid credentials</h1></body></html>");
pw.println("<html><body><a href=login.html>go back</a></body></html>");
}
我正在尝试从 select 查询获取的单个行中访问数据。当我尝试通过 rs.getString()
访问数据时,它会抛出 NullPointerException
.
从结果集中访问数据的任何方法都会导致 NullPointerException
。为什么会这样?
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
boolean status=true;
String email=request.getParameter("user");
String password=request.getParameter("pass");
PrintWriter pw = response.getWriter();
if (status) {
String driverName = "org.hsqldb.jdbcDriver";
String URL = "jdbc:hsqldb:hsql://localhost/";
String UID = "SA";
String PWD = "";
Connection con = null;
PreparedStatement sql = null;
ResultSet rs = null;
try {
Class.forName(driverName);
con = DriverManager.getConnection(URL, UID, PWD);
System.out.println("connected = " + con);
sql = con.prepareStatement("SELECT * FROM \"USER\" where email='"+email+"' and password='"+password+"'");
boolean sql_st=sql.execute();
System.out.println(sql_st);
rs=sql.getResultSet();
if(rs.next())
{
HttpSession hp = request.getSession(true);
rs=sql.getResultSet();
hp.setAttribute("name", rs.getString("name"));
pw.println("<html><body><h1>Welcome "+rs.getString("name")+"</h1></body></html>");
}
else
{
pw.println("<html><body><h1>invalid credentials</h1></body></html>");
pw.println("<html><body><a href=login.html>go back</a></body></html>");
}
} catch (SQLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
else
{
pw.println("<html><body><h1>Invalid Input</h1></body></html>");
pw.println("<html><body><a href=register.html>go back</a></body></html>");
}
你已经写了两次rs=sql.getResultSet();
,这就是它return null
的原因,尝试像下面这样使用PreparedStatement :
PreparedStatement ps= con.prepareStatement("SELECT * FROM USER where
email=? and password=?");
//putting value for placeholder (?)
ps.setString(1,email);
ps.setString(2,password);
ResultSet resultset= ps.executeQuery();
//if there is row exist then do below
if(resultset.next()){
HttpSession hp = request.getSession(true);
hp.setAttribute("name", resultset.getString("name"));
//getting name
pw.println("<html><body><h1>Welcome "+resultset.getString("name")+"</h1></body></html>");
} else {
pw.println("<html><body><h1>invalid credentials</h1></body></html>");
pw.println("<html><body><a href=login.html>go back</a></body></html>");
}