我正在开发一个登录页面,在这个页面上,成员可以进行登录和注册。当我将用户名和密码与数据库表中的用户数据进行比较时,我遇到了问题。这段代码引发了这个异常,但我不明白出了什么问题。服务器抛出此消息:
javax.servlet.servletexception:java.sql.sqlexception:结果集开始之前
String search_in ="select USERNAME,PASSWORD from USERS";
ResultSet search_result= myStatement.executeQuery( search_in );
while( search_result.next() ){
a[i] = search_result.getString("USERNAME");
b[i] = search_result.getString("PASSWORD");
//new_username and new_password are form input parameters
if( a[i].equals(new_username) && b[i].equals(new_password) ){
out.println("in if statement<br>");
found = true;
break;
}
i++;
}
2条答案
按热度按时间xmd2e60i1#
您的错误消息足以解释根本原因。。!!
javax.servlet.servletexception:java.sql.sqlexception:结果集开始之前
如果我们试图访问没有被我们的索引的行,就会发生这种情况
resultSet
光标。那是什么???当我们开火的时候
select
查询,在结果中,我们可以得到多行或单行或根本没有行(结果取决于您的查询和数据)。这些行存储在
resultSet
示例。为了访问这些行,我们可以通过
resultSet.next()
(或通过任何其他方式……)。就像你在循环时用的那样.next()
功能,我也在考虑。所以,这个
next()
函数实际上会将光标移动到下一行,并在开始时指向实际结果行之前的一个索引,也就是说,它在-1
值,所以一旦我们落入while循环中resultSet.next()
函数将光标移动到前面的一个位置,即它将第一次指向位置处的实际行0
以此类推,直到没有任何东西可以迭代。您提到的错误是因为光标指向
-1
最初,当它尝试迭代(即移动到真正的第一行)时,它失败了,因为该查询没有返回任何行,因此错误为before the start of ResultSet
.我希望这能澄清你对
resultSet
让你了解幕后发生的事情。所以,针对您的问题的建议是,尝试检查/更改您的查询或在数据库中查看,它是否实际包含应在该查询中返回的任何此类行。
x6h2sr282#
与其从数据库中获取所有记录并比较应用程序代码中的值,我建议您让数据库根据您的条件提供记录。
为此,请更改查询和代码,如下所示。。