我正在向我的项目中添加一个基本登录表单,它会给我以下错误: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 (rSet.next()){
//
// }
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 :(");
}
}
1条答案
按热度按时间ha5z0ras1#
next()
有副作用,你不能说两次。你需要准确地呼叫它一次,然后如果它返回
false
,做一件事,如果true
,再做一次。您所需要的是,使用else
.此外,请使用bcrypt或其他密码哈希,不要将密码放入数据库中。此外,连接和结果集需要在资源受保护的情况下重试。此外,您的应用程序不安全(它具有sql注入攻击)。
nb:只是为了避免“但这只是为了学校”。好吧,你告诉我:学习愚蠢的安全实践有什么意义?您可以在web上搜索这些术语(“sql注入攻击”、“密码哈希”、“bcrypt”等等)。你会学到重要的信息。