【问题标题】:Why can't my " while(rs.next()) " execute all the if, ifelse,else, that I've used? [closed]为什么我的“while(rs.next())”不能执行我用过的所有 if、ifelse、else? [关闭]
【发布时间】:2015-05-26 01:39:50
【问题描述】:

这是我的代码:

String queryCheck = "SELECT username, password FROM LOGIN WHERE username='" + username + "' AND password='" + password + "'";
                     stmt.executeQuery(queryCheck);
                     ResultSet rs = stmt.getResultSet();
                     while(rs.next()) {
                          dbUserName = rs.getString("username");
                          dbPassword = rs.getString("password");
                         if (dbUserName.equals(username) && dbPassword.equals(password)) {
                              MemberOption Rbs = new MemberOption();
                              Rbs.setVisible (true);
                         }

                         else if (!dbUserName.equals(username) && !dbPassword.equals(password)){
                              int notif = JOptionPane.showConfirmDialog(this, "Your are not Registered! USERNAME does not match Go Back? ", "Closing Program",JOptionPane.YES_OPTION, JOptionPane.QUESTION_MESSAGE);
                               if(notif == 0) {
                               return;

                             }
                        else {
                        System.exit(0);
                    }
                }
               }

这条语句没有被执行:

else if (!dbUserName.equals(username) && !dbPassword.equals(password)){
                              int notif = JOptionPane.showConfirmDialog(this, "Your are not Registered! USERNAME does not match Go Back? ", "Closing Program",JOptionPane.YES_OPTION, JOptionPane.QUESTION_MESSAGE);
                               if(notif == 0) {
                               return;

                             }
                        else {
                        System.exit(0);
                    }
                }

请帮忙

【问题讨论】:

    标签: java sql while-loop


    【解决方案1】:

    因为您的查询只返回具有usernamepassword 的行,所以只有

    if (dbUserName.equals(username) && dbPassword.equals(password))这个如果执行了

    【讨论】:

      【解决方案2】:

      执行这段代码

      else if (!dbUserName.equals(username) && !dbPassword.equals(password))
      {
                                int notif = JOptionPane.showConfirmDialog(this,     "Your are not Registered! USERNAME does not match Go Back? ", "Closing Program",JOptionPane.YES_OPTION, JOptionPane.QUESTION_MESSAGE);
                                 if(notif == 0) {
                                 return;
      
                               }
                          else {
                          System.exit(0);
                      }
                  }
      

      你必须输入用户名和密码都错误然后才会执行!还要检查您提供的用户名和密码是否在最后或开头不包含多余的空格。

      【讨论】:

        【解决方案3】:

        您必须更改身份验证逻辑。我会推荐下面的密码认证逻辑。

        String queryCheck = "SELECT password FROM LOGIN WHERE username='" + username + "'";
        stmt.executeQuery(queryCheck);
        ResultSet rs = stmt.getResultSet();
        if(rs != null) {
            while(rs.next()) {
                dbPassword = rs.getString("password");
                if (dbPassword.equals(password)) {
                    MemberOption Rbs = new MemberOption();
                    Rbs.setVisible (true);
                }
                else {
                    int notif = JOptionPane.showConfirmDialog(this, "USERNAME and PASSWORD does not match Go Back? ", "Closing Program",JOptionPane.YES_OPTION, JOptionPane.QUESTION_MESSAGE);
                    if(notif == 0) {
                        return;
                    }
                }
            }
        }else {
            int notif = JOptionPane.showConfirmDialog(this, "Your are not Registered! Go Back? ", "Closing Program",JOptionPane.YES_OPTION, JOptionPane.QUESTION_MESSAGE);
            if(notif == 0) {
                return;
            }
        }
        

        根据您在问题中的代码,如果查询没有返回任何结果,您将不会进入 rs.next() 循环。

        【讨论】:

          【解决方案4】:

          根据传递给它的条件,查询预计只会产生用户名和密码。所以很明显,while循环中的if条件只有在resulset不为null时才会被执行。更改表格中未包含的用户名或密码以测试 elseif 条件。

          【讨论】:

            猜你喜欢
            • 2020-07-09
            • 1970-01-01
            • 1970-01-01
            • 2015-07-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多