为什么resultset API抛出“sqlexception:空结果集上的非法操作”?

vsaztqbk  于 2021-08-25  发布在  Java
关注(0)|答案(1)|浏览(339)

我正在向我的项目中添加一个基本登录表单,它会给我以下错误:java.sql.sqlexception:对空结果集的非法操作。“当用户名或密码与mysql数据库中的数据不匹配时。
如果我检查结果集是否为空,则if语句中的代码不起作用。但是,我的代码在没有if语句的情况下运行良好。
请在下面找到代码的那一部分

  1. String studentNumber = userText.getText();
  2. String password = String.valueOf(passText.getPassword());
  3. String executeQuery = "select * from login where studentNumber='"+studentNumber+"' and password ='"+password+"'" ;
  4. ResultSet rSet = connObject.queries.executeQuery(executeQuery);// stores result of query
  5. if(!rSet.next()){
  6. JOptionPane.showMessageDialog(null, "Student Number/ Password not found :(");
  7. }
  8. // if (rSet.next()){
  9. //
  10. // }
  11. if(studentNumber.equals(rSet.getString("studentNumber"))){
  12. if(password.equals(rSet.getString("password"))){
  13. JOptionPane.showMessageDialog(null, "you are now logged in :)");
  14. loginFrame.setVisible(false);
  15. new operationClass();
  16. }else{
  17. JOptionPane.showMessageDialog(null, "password not found :(");
  18. }
  19. }
ha5z0ras

ha5z0ras1#

next() 有副作用,你不能说两次。
你需要准确地呼叫它一次,然后如果它返回 false ,做一件事,如果 true ,再做一次。您所需要的是,使用 else .
此外,请使用bcrypt或其他密码哈希,不要将密码放入数据库中。此外,连接和结果集需要在资源受保护的情况下重试。此外,您的应用程序不安全(它具有sql注入攻击)。
nb:只是为了避免“但这只是为了学校”。好吧,你告诉我:学习愚蠢的安全实践有什么意义?您可以在web上搜索这些术语(“sql注入攻击”、“密码哈希”、“bcrypt”等等)。你会学到重要的信息。

相关问题