如何解决为什么 ResultSet API 会抛出“SQLException: Illegal operation on empty result set”?
我正在向我的项目添加一个基本的登录表单,它给了我这个错误 java.sql.sqlException: Illegal operation on empty result set。" 当用户名或密码与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 或其他密码哈希,不要将密码放入数据库中。此外,连接和结果集需要受保护的尝试资源。此外,您的应用不安全(存在 SQL 注入攻击)。
注意:只是为了避免“但这只是为了学校”。好吧,你告诉我:学习愚蠢的安全实践有什么意义?您可以在网络上搜索这些术语(“SQL 注入攻击”、“密码哈希”、“bcrypt”等)。您将了解重要信息。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。