需要java登录代码方面的帮助吗

需要java登录代码方面的帮助吗,java,login,Java,Login,我正在用Java编写一个小的登录程序,我有一个小问题:在检查用户名或密码是否与数据库中的条目匹配时,我使用next()-迭代器,如果输入的数据与数据库中的数据不匹配,我希望它显示“不正确的用户名或密码” 问题是每次我测试它并尝试使用不正确的用户名或密码登录时,迭代器都会逐个检查我的数据库条目,并在每次查询中显示“不正确的用户名或密码”。我只希望它在检查完数据库中的所有数据后立即显示消息。这是我的密码;我希望有人能帮助我 try { String un=username.getText()

我正在用Java编写一个小的登录程序,我有一个小问题:在检查用户名或密码是否与数据库中的条目匹配时,我使用
next()
-迭代器,如果输入的数据与数据库中的数据不匹配,我希望它显示“不正确的用户名或密码”

问题是每次我测试它并尝试使用不正确的用户名或密码登录时,迭代器都会逐个检查我的数据库条目,并在每次查询中显示“不正确的用户名或密码”。我只希望它在检查完数据库中的所有数据后立即显示消息。这是我的密码;我希望有人能帮助我

try
{
    String un=username.getText();
    String pw=password.getText();  
    Connection conn = DriverManager.getConnection("jdbc:ucanaccess://C:\\Users\\JGUTX\\Documents\\UserDatabase.accdb"); 
    Statement s=conn.createStatement();
    ResultSet rs=s.executeQuery("SELECT UserName,Password,Administrator FROM UserDatabase"); 
    while(rs.next()){
    boolean type=rs.getBoolean("Administrator");
    String dbUser=rs.getString("UserName");
    String dbPass=rs.getString("Password");

    if(un.equals(dbUser)&& pw.equals(dbPass)){

        if(type==true){
        AdMenu admenu=new AdMenu();
        admenu.show();
        this.setVisible(false);       
        } else{

        Menu menu=new Menu();
        menu.show();
        this.setVisible(false); 
        }        
    }else{
       JOptionPane.showMessageDialog(null,"Ïncorrect username or password");
    }
    }
} 
catch (Exception e) 
{
    System.err.println("Got an exception!");
    System.err.println(e.getMessage());

   JOptionPane.showMessageDialog(null, "Error connecting to database...");
}    
试试这个:

    try
    {
        boolean accountMatches = false;
        String un=username.getText();
        String pw=password.getText();  
        Connection conn = DriverManager.getConnection("jdbc:ucanaccess://C:\\Users\\JGUTX\\Documents\\UserDatabase.accdb"); 
        Statement s=conn.createStatement();
        ResultSet rs=s.executeQuery("SELECT UserName,Password,Administrator FROM UserDatabase"); 
        while(rs.next()){
        boolean type=rs.getBoolean("Administrator");
        String dbUser=rs.getString("UserName");
        String dbPass=rs.getString("Password");

        if(un.equals(dbUser)&& pw.equals(dbPass)){
            accountMatches = true; 
            if(type==true){
            AdMenu admenu=new AdMenu();
            admenu.show();
            this.setVisible(false);       
            } else{

            Menu menu=new Menu();
            menu.show();
            this.setVisible(false); 
            }

        }
        if(accountMatches) break;

        }
    if(!accountMatches) JOptionPane.showMessageDialog(null,"Ïncorrect username or password");
    } 
    catch (Exception e) 
    {
        System.err.println("Got an exception!");
        System.err.println(e.getMessage());

       JOptionPane.showMessageDialog(null, "Error connecting to database...");
    }    

您可以有一个标志变量,当找到正确的用户名和密码时,可以将其翻转。然后使用break语句

然后在循环之后,检查标志。 就像这样

    boolean flag = false;
    while(rs.next()){
        boolean type=rs.getBoolean("Administrator");
        String dbUser=rs.getString("UserName");
        String dbPass=rs.getString("Password");

        if(un.equals(dbUser)&& pw.equals(dbPass)){

            if(type == true){
               AdMenu admenu=new AdMenu();
               admenu.show();
               this.setVisible(false);   

            } else{

               Menu menu=new Menu();
               menu.show();
               this.setVisible(false); 
            }  
              flag = true;
              break;     
        }
      }
      if(flag == true){
          JOptionPane.showMessageDialog(null,"Ïncorrect username or password"); 
}

你不能查询用户名=?不值得尝试从DB获取所有的记录,并反复查看它们是否匹配。不相关的注释:您不应该用纯文本存储密码。此外,通过拆分DB查找和将查询结果处理成不同的类来考虑单个责任。我知道我不应该将密码作为纯文本。这只是一个例子,我也是一个java新手