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

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

我正在向我的项目中添加一个基本登录表单,它会给我以下错误: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 :(");
                    }
                }
ha5z0ras

ha5z0ras1#

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

相关问题