由于某种原因,登录仅适用于数据库中的最后一个用户。我有一个while
循环,但我认为这会让程序转到最后一个用户。我尝试使用if
语句,但只有第一个用户才能登录。
if (username!=null && password!=null) {
pagename = "main";
} else {
username = request.getParameter("username");
password = request.getParameter("password");
while(results.next())
{
if(results.getString(2).equals(password) && results.getString(1).equals(username))
{
pagename="main";
}
else
{
pagename="start";
}
}
}
这是如何引起的?如何解决?
答案 0 :(得分:4)
您正在将整个数据库表复制到Java的内存中,并在while
循环中对所有记录进行比较。当与记录匹配时,您不会中止while
循环,因此它会继续循环其余记录,因此pagename
每次都会被“开始”覆盖。
您需要添加break
声明:
if (results.getString(2).equals(password) && results.getString(1).equals(username)) {
pagename="main";
break;
}
或者更好的是,让SQL完成它的设计工作,选择并返回完全您需要的数据:
preparedStatement = connection.prepareStatement("SELECT id FROM user WHERE username=? AND password=MD5(?)");
preparedStatement.setString(1, username);
preparedStatement.setString(2, password);
resultSet = preparedStatement.executeQuery();
if (resultSet.next()) {
pagename = "main";
}
else {
pagename = "start";
}
这更有效率和更明智。
答案 1 :(得分:0)
为什么要遍历整个表来执行此操作?如果您有1000000条记录怎么办?您应该使用传递用户名和密码参数的WHERE子句查询数据库,然后检查是否有返回的行。