无法使用Servlet将数据插入MySQL

时间:2013-12-06 11:57:05

标签: java mysql jsp servlets netbeans

我正在使用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脚本中。谢谢你的时间。

2 个答案:

答案 0 :(得分:2)

默认情况下,

rs2为空 如果条件(usernameExists == false)true,则只会启动它 但我认为记录存在,因此usernameExists返回true,并且上述条件变为false。因此rs2仍为null

null指点引用上,您无法调用任何特定于对象的方法 否则会产生NullPointerException。你的情况也一样。

  1. 除非必要,否则您无需在finally块中捕获异常。
  2. 在finally块中也使用if( rs2 != null ) rs2.close();
  3. 您可以对每个此类对象采取类似的警告。

答案 1 :(得分:0)

更新:解决问题

我用

替换了rs2 = pst2.executeQuery();

rs2 = pst2.executeUpdate();

它有效。