我正在使用Netbeans JAVA(JSP和Servlet)和MySQL进行网络应用,我正在尝试制作“注册”功能。
因此,从JSP中我调用SignUp Servlet,它调用PostUserData。 Userbean只保留数据,以便我可以在JSP中再次显示它们。
我收到错误“java.lang.NullPointerException - model.DataManager.PostUserData(DataManager.java:191)”,它指向结果集关闭的位置。
public UserBean PostUserData(String username, String password, String first_name, String last_name, String email)
{
UserBean userBean = new UserBean();
Connection conn = getConnection();
if (conn != null)
{
ResultSet rs1 = null;
ResultSet rs2 = null;
PreparedStatement pst1 = null;
PreparedStatement pst2 = null;
try
{
String strQuery1 = "select * from user where uid=?";
pst1 = conn.prepareStatement(strQuery1);
pst1.setString(1, username);
rs1 = pst1.executeQuery();
boolean usernameExists = rs1.next();
if (usernameExists == false) {
String student = "student";
String strQuery2 = "INSERT INTO user VALUES (?, ?, ?, ?, ?, ?)";
pst2 = conn.prepareStatement(strQuery2);
pst2.setString(1, username);
pst2.setString(2, password);
pst2.setString(3, first_name);
pst2.setString(4, last_name);
pst2.setString(5, email);
pst2.setString(6, student);
rs2 = pst2.executeQuery();
} else
{
userBean.setUidExists(true);
}
}//end of try
catch(SQLException ex)
{
ex.printStackTrace();
}
finally
{
try
{
rs1.close();
rs2.close();
pst1.close();
pst2.close();
}
catch (SQLException e) {e.printStackTrace();}
putConnection(conn);
}//end of finally
}//end of if
return userBean;
}
我已经以相同的方式完成了登录功能,它与我的数据库完美配合,因此MySQL没有问题。我还测试了MySQL工作台中的插入脚本并且它有效。
最后,当我删除代码时
> rs1.close();
> rs2.close();
> pst1.close();
> pst2.close();
在try之外,它会检查用户名是否存在,所以问题肯定在INSERT脚本中。谢谢你的时间。
答案 0 :(得分:2)
rs2
为空
如果条件(usernameExists == false)
为true
,则只会启动它
但我认为记录存在,因此usernameExists
返回true
,并且上述条件变为false
。因此rs2
仍为null
。
在null
指点引用上,您无法调用任何特定于对象的方法
否则会产生NullPointerException
。你的情况也一样。
if( rs2 != null ) rs2.close();
。您可以对每个此类对象采取类似的警告。
答案 1 :(得分:0)
更新:解决问题
我用
替换了rs2 = pst2.executeQuery();
rs2 = pst2.executeUpdate();
它有效。