如何处理 java sql exception:exhausted 结果集

how to handle java sql exception:exhausted result set

我对以下代码有疑问。帮我!!

    Class.forName("oracle.jdbc.driver.OracleDriver");
    Connection conn=DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:xe","system","**********");
    Statement st=conn.createStatement();
    String sql="select password from db where username='user'";
    ResultSet rs=st.executeQuery(sql);
    rs.next();
    String password=rs.getString("password");
    if(password.equals(pass))
    {       
        RequestDispatcher rd=req.getRequestDispatcher("/home.jsp");
        rd.forward(req,res);
    }
    else
    {
        out.println("invalid username and password");
    }

当我执行此代码时,我收到 java sql 异常:结果集耗尽。提前致谢...

与其使用 rs.next();,不如将其与 while 一起使用,例如 while(rs.next())。获得结果集后,指针 将指向第一条记录。每次执行 rs.next() 时, 指针 将前进到下一条记录。如果与 while 一起使用,一旦到达结果集的末尾,rs.next() 将在迭代所有记录后 return false。在你的例子中,由于你没有检查结果集是否已经耗尽并试图推进 指针 ,你得到了异常。

正确,因为如果您输入错误的用户名或密码,将不会返回任何记录。因此,当您在这种情况下使用 rs.next(); 时,它会尝试访问空结果集的第一行

 String password=rs.getString("password");//error, if rs is empty

where 子句中您没有使用 user 变量

where 子句应为 where username='"+user+"'";

而不是

rs.next();

使用

if(rs.next())
{
     String password=rs.getString("password");
     ........
}