我遇到以下代码的问题。帮我!!
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异常:耗尽的结果集。提前谢谢......
答案 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");
........
}