Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 有没有其他方法可以访问resultset而不引发空点异常_Java_Servlets_Jakarta Ee_Jdbc_Nullpointerexception - Fatal编程技术网

Java 有没有其他方法可以访问resultset而不引发空点异常

Java 有没有其他方法可以访问resultset而不引发空点异常,java,servlets,jakarta-ee,jdbc,nullpointerexception,Java,Servlets,Jakarta Ee,Jdbc,Nullpointerexception,我正在尝试从select查询获取的单行中访问数据。当我试图通过rs.getString访问数据时,它抛出NullPointerException 任何从结果集中访问数据的方法都会导致NullPointerException。为什么会发生这种情况 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGe

我正在尝试从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;有两次,这就是它返回null的原因,请尝试使用如下方法:

          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>");
            }

顺便提一下,一个技巧:了解如何使用资源自动关闭数据库资源并简化代码。请参阅&这很有效,谢谢