我编写了一个简单的代码来测试登录名和密码,(登录名和密码由用户提供)然后我通过存储在数据库中的登录名和密码对它们进行比较。但问题是函数返回错误结果(它浏览所有行,即使它在第一行是真的) 这是代码:
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;
}
答案 0 :(得分:4)
我不明白为什么要为每个请求加载登录名和密码的地图。您可以只加载给定登录的密码,如果失败,则登录不存在。
此外,我想知道你是否真的想忽略密码和登录的情况。
您提供的代码失败,因为您在找到匹配的登录名/密码时不会退出循环。
您应该重构代码并消除对地图和循环的需求。正如我所说,只需查看用户在您的数据库中显示的登录信息。
答案 1 :(得分:2)
有几个问题: