在java中嵌套if语句

时间:2012-12-31 20:00:36

标签: java

我正在处理用户登录页面。我希望管理员可以访问管理员部分,但不能访问常规用户。以下代码有效,但如果管理员以外的用户登录,则会收到错误的密码错误并将其发送到正确的页面。如果允许否定答案和正面答案,我认为嵌套有问题。我非常感谢对此事的任何帮助。

        try {
        String sql="Select * from Users1";
        String host ="jdbc:derby://localhost:1527/Nash";
        String uName = "CON";
        String uPass = "smokes";
        Connection con = DriverManager.getConnection(host, uName, uPass);
        Statement stmt=con.createStatement();
        ResultSet rs = stmt.executeQuery(sql);
        String user= userName.getText();
        String pwd= password.getText();
        while(rs.next()) {
        String uname=rs.getString("User_name");
        String pass=rs.getString("Password");
        String admin1=rs.getString("admin");

if ((user.equals(uname)) && (pwd.equals(pass)))
    { 
    mainPanel.setVisible(true);
    blankContent.setVisible(true);
    adminButton.setEnabled(false);
    receiptContent.setVisible(false);
    memberContent.setVisible(false);
    securityPanel.setVisible(false);
    }

        if ((user.equals(uname)) && (pwd.equals(pass))&&(admin1.equals("y")))
        {
            mainPanel.setVisible(true);
            blankContent.setVisible(true);
            adminButton.setEnabled(true);
            receiptContent.setVisible(false);
            memberContent.setVisible(false);
            securityPanel.setVisible(false);
         }
else 
    {
            JOptionPane.showMessageDialog(null,  "User name and password do"
                    + " not match!","ALERT!", JOptionPane.ERROR_MESSAGE); 

            }   
}   } catch (SQLException ex) {
        Logger.getLogger(program.class.getName()).log(Level.SEVERE, null, ex);
    }

修改 以下是编辑的代码链接---> New revised code link

3 个答案:

答案 0 :(得分:3)

您需要将else移出一个级别。代码格式化很难说明发生了什么,但是else在admin if语句中。像这样:

if ((user.equals(uname)) && (pwd.equals(pass)))
{ 
    if (admin1.equals("y"))
    {
        // ... admin
    }
    else
    {   
        // ... regular user
    }
}
else 
{
    JOptionPane.showMessageDialog(null,  "User name and password do"
           + " not match!","ALERT!", JOptionPane.ERROR_MESSAGE); 
}

答案 1 :(得分:0)

喜欢

if ((user.equals(uname)) && (pwd.equals(pass)))
    { 
    mainPanel.setVisible(true);
    blankContent.setVisible(true);
    receiptContent.setVisible(false);
    memberContent.setVisible(false);
    securityPanel.setVisible(false);
    adminButton.setEnabled(false);
          if(admin1.equals("y"))
                 adminButton.setEnabled(true);

    }


else 
    {
            JOptionPane.showMessageDialog(null,  "User name and password do"
                    + " not match!","ALERT!", JOptionPane.ERROR_MESSAGE); 

            }  

答案 2 :(得分:0)

你正在做的每件事情都是正确的,除非你错过了导致这个问题的一个小故障(From your pastebin code in your comment)

你的同时声明在这里是个大问题。它将继续检查数据库中的所有记录。

获得所需用户后使用break

boolean isPass = false;
while(rs.next()){
    // Your user authentication 
    if ((user.equals(uname)) && (pwd.equals(pass)))
    { 
        if (admin1.equals("y")) {
            // do your admin operation
            break;
        } else {   
            // do your non admin operation
            break;
        }
    } else {
        // if authentication fails 
        isPass = true
    }
}
// Outside of while block
if(isPass){
    // if authentication fails show error message
    JOptionPane.showMessageDialog(null,  "User name and password do"
           + " not match!","ALERT!", JOptionPane.ERROR_MESSAGE); 
}

我展示了这段代码片段,以展示如何利用break并意识到你还应该breakelse part另外明智地继续显示所有那些记录的错误消息在if部分中对身份验证失败。

我建议从其他方法获取数据库值,并在另一种方法中进行身份验证。