我编写了一个简单的代码来测试登录名和密码,(登录名和密码由用户给出),然后我通过存储在数据库中的登录名和密码进行比较。但问题是函数返回错误的结果(它浏览所有行,即使第一行为真) 这是代码:
public String LoginPasswordCheck(Connection con)
{
HashMap<String,String> mapLoginPWD = new HashMap<String,String> ();
String sqlLogin;
String checkaccess="true";
String log;
String pwd;
sqlLogin="select login ,password from profil_user;";
try{
st=(PreparedStatement) con.prepareStatement(sqlLogin);
ResultSet rs1 = st.executeQuery();
while(rs1.next())
{
log = rs1.getString("login");
pwd=rs1.getString("password");
mapLoginPWD.put(log, pwd);
}
Iterator iteratorkey = mapLoginPWD.keySet().iterator();
String myKey="";
String value="";
while(iteratorkey.hasNext())
{
myKey = (String) iteratorkey.next();
value= mapLoginPWD.get(myKey);
//login and password given by the user
if( !(this.login.equalsIgnoreCase(myKey)) && !(this.password.equalsIgnoreCase(value) )&& !(iteratorkey.hasNext()) )
{
checkaccess ="fail";
}
else
checkaccess ="success";
}
}
catch (SQLException e)
{
e.printStackTrace();
}
return checkaccess;
}
最佳答案
我不明白为什么您要为每个请求加载登录名和密码的映射。您可以只加载给定登录名的密码,如果失败,则该登录名不存在。
此外,我想知道您是否真的想忽略密码和登录名的大小写。
您提供的代码失败,因为当您找到匹配的登录名/密码时没有退出循环。
您确实应该重构代码并消除对映射和循环的需要。正如我所说,只需查找用户在数据库中显示的登录名即可。
关于java - 代码比较登录名和密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6324669/