有没有其他方法可以访问结果集而不会引发空点异常

时间:2019-05-25 03:50:33

标签: java servlets java-ee jdbc nullpointerexception

我正在尝试从选择查询获取的单行中访问数据。当我尝试通过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>");
    }

1 个答案:

答案 0 :(得分:3)

您写过两次rs=sql.getResultSet();就是返回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>");
            }