如何处理java sql异常:耗尽结果集

时间:2015-07-26 13:48:43

标签: java jdbc resultset

我遇到以下代码的问题。帮我!!

    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异常:耗尽的结果集。提前谢谢......

2 个答案:

答案 0 :(得分:0)

不使用rs.next();,而是使用while(rs.next())。获得结果集后,指针将指向第一条记录。每次执行rs.next()时,指针将前进到下一条记录。如果与while一起使用,一旦到达结果集的末尾,一旦所有记录都被迭代,rs.next()将返回false。在您的情况下,由于您没有检查结果集是否已用尽并尝试提升指针,因此您将获得异常。

答案 1 :(得分:0)

这是正确的,因为如果输入错误的用户名或密码,将返回NO记录。因此,在这种情况下使用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");
     ........
}