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