为什么 ResultSet API 会抛出 'SQLException: Illegal operation on empty result set'?

Why do ResultSet APIs throw 'SQLException: Illegal operation on empty result set'?

我正在向我的项目添加一个基本的登录表单,它给了我这个错误 java.sql.SQLException: 对空结果集的非法操作。" 当用户名或密码与 MySQL 数据库中的数据不匹配。

如果我检查结果集是否为空,那么 if 语句中的代码将不起作用。但是,如果没有该 if 语句,我的代码运行良好。

请找到下面的代码部分

String studentNumber = userText.getText();
String password = String.valueOf(passText.getPassword()); 

String executeQuery = "select * from login where studentNumber='"+studentNumber+"' and password ='"+password+"'" ;
ResultSet rSet = connObject.queries.executeQuery(executeQuery);// stores result of query

if(!rSet.next()){
    JOptionPane.showMessageDialog(null, "Student Number/ Password not found :(");
}
if(studentNumber.equals(rSet.getString("studentNumber"))){
    if(password.equals(rSet.getString("password"))){
        JOptionPane.showMessageDialog(null, "you are now logged in :)");

        loginFrame.setVisible(false);
        new operationClass();
    }else{
        JOptionPane.showMessageDialog(null, "password not found :(");
    }
}

next()有副作用,不能两次调用.

您只需要调用它一次,然后如果它返回 false,则做一件事,如果 true,则做另一件事。您所需要的只是使用 else.

而不是注释掉的代码

此外,使用 bcrypt 或其他密码哈希,不要将密码放在数据库中。此外,连接和结果集需要 try-with-resources protected。此外,您的应用程序不安全(它有 SQL 注入攻击)。

注意:只是为了避免“但这只是为了学校”。好吧,你告诉我:学习愚蠢的安全实践有什么意义?您可以在网络上搜索这些术语(“SQL 注入攻击”、“密码哈希”、“bcrypt”等)。您将了解重要信息。