【发布时间】:2013-12-06 11:57:04
【问题描述】:
我正在使用 Netbeans JAVA(JSP 和 Servlet)和 MySQL 开发一个 Web 应用程序,并且我正在尝试创建一个“注册”功能。
因此,我从 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脚本上。感谢您的宝贵时间。
【问题讨论】:
-
哪条语句给了你NPE?如果 usernameExists=true 则 rs2 可以为空
-
投票关闭 - 根据 OP,问题已解决。
标签: java mysql jsp servlets netbeans