jsp文件中的if语句无法获取

7xllpg7q  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(299)

我正在开发一个登录页面,在这个页面上,成员可以进行登录和注册。当我将用户名和密码与数据库表中的用户数据进行比较时,我遇到了问题。这段代码引发了这个异常,但我不明白出了什么问题。服务器抛出此消息:
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++;
}
xmd2e60i

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 让你了解幕后发生的事情。
所以,针对您的问题的建议是,尝试检查/更改您的查询或在数据库中查看,它是否实际包含应在该查询中返回的任何此类行。

x6h2sr28

x6h2sr282#

与其从数据库中获取所有记录并比较应用程序代码中的值,我建议您让数据库根据您的条件提供记录。
为此,请更改查询和代码,如下所示。。

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;
}

相关问题