我有这个代码:
for(int i=0;i<numRows;i++)
{
String Usernames = rs.getString("Username");
String Password = rs.getString("Password");
String getAcc = rs.getString("UserType");
rs.next();
if(Usernames.contains(UsernameIn.trim())&&Password.contains(PasswordIn.trim()))
{
if(getAcc.trim().equals("admin"))
{
clear();
AdminUser.UTypeAdmin(args, UsernameIn, rs, dbTable(), path);
}
if(getAcc.trim().equals("standard"))
{
clear();
StandardUser.UTypeStandard(args, UsernameIn, rs, dbTable(),path);
}
}
if(!Usernames.contains(UsernameIn.trim())&&!Password.contains(PasswordIn.trim()))
{
System.out.println("Invalid Credentials Entered");
Thread.sleep(2000);
clearandreset(args);
}
}
理想情况下,程序会将用户的输入与结果集进行比较,并确定输入是否匹配。当正确的用户输入其凭据时,应用程序将正常运行。最终应用程序按预期重置,但当输入另一个有效用户时,应用程序显示输入的凭据无效
,从而破坏应用程序。有人能解决这个问题吗?
最佳答案
首先,您应该将“无效凭据”代码移到循环之外。否则,仅当凭据与第一行匹配时它才会起作用。
第二,检查您是否没有重复使用相同的结果集实例两次
for(int i=0;i<numRows;i++)
{
String Usernames = rs.getString("Username");
String Password = rs.getString("Password");
String getAcc = rs.getString("UserType");
rs.next();
if(Usernames.contains(UsernameIn.trim())&&Password.contains(PasswordIn.trim()))
{
if(getAcc.trim().equals("admin")) {
clear();
AdminUser.UTypeAdmin(args, UsernameIn, rs, dbTable(), path);
}
if(getAcc.trim().equals("standard")) {
clear();
StandardUser.UTypeStandard(args, UsernameIn, rs, dbTable(),path);
}
}
}
// We have traversed all rows but not found matching user
System.out.println("Invalid Credentials Entered");
Thread.sleep(2000);
clearandreset(args);
关于java - 用户凭据与数据库的比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28874214/