为什么 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”等)。您将了解重要信息。
我正在向我的项目添加一个基本的登录表单,它给了我这个错误 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”等)。您将了解重要信息。