我正在开发一个登录页面,其中成员进行登录和注册。当我将用户名和密码与数据库表中的用户数据进行比较时,我遇到了麻烦。这段代码抛出了这个异常,但我无法理解出了什么问题。 服务器抛出此消息:
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++;
}
答案 0 :(得分:0)
您的错误消息已足够根本原因.. !!
javax.servlet.ServletException:java.sql.SQLException:在开始结果集之前
如果我们尝试访问未由resultSet
游标编制索引的行,则会发生这种情况。那是什么???
当我们触发select
查询时,结果我们可以获得多行或单行或根本没有行(结果取决于您的查询和数据)。
这些行存储在resultSet
实例中。
要访问这些行,我们可以通过resultSet.next()
(或通过任何其他方式)迭代它们。正如您在.next()
函数上使用while循环时,我考虑相同。
所以,这个next()
函数实际上将光标移动到下一行,并且最初它将一个索引指向实际结果行之前,这意味着它在-1
值处索引,所以一旦我们跌落在while循环中,resultSet.next()
函数将光标移动到前面的一个位置,即第一次它将指向位置0
的实际行,依此类推,直到没有任何内容可以迭代。
您提到的错误是因为游标最初指向-1
,当它尝试迭代(即移动到真正的第一行)时,它会失败,因为该查询没有返回任何行,因此错误说before the start of ResultSet
。
我希望它能清除你对resultSet
的看法,并让你了解幕后发生的事情。
因此,对您的问题的建议是,尝试检查/更改您的查询或在数据库中查看它是否实际包含应该在该查询上返回的任何此类行。
答案 1 :(得分:0)
而不是从数据库中提取所有记录并比较您的数据库中的值 应用程序代码,我建议你让数据库根据你的条件给你记录。
为此,请更改您的查询和代码,如下所示。
String search_in ="select USERNAME,PASSWORD from USERS where USERNAME = ? AND PASSWORD = ?";
myStatement.setString(1, new_username); // assuming your column is varchar or text
myStatement.setString(2, new_password); // assuming your column is varchar or text
ResultSet search_result= myStatement.executeQuery( search_in );
if( search_result.next() ){
out.println("in if statement<br>");
found = true;
}