Java 登录仅对数据库中的最后一个用户有效
出于某种原因,登录只对数据库中的最后一个用户有效。我有一个Java 登录仅对数据库中的最后一个用户有效,java,mysql,jdbc,Java,Mysql,Jdbc,出于某种原因,登录只对数据库中的最后一个用户有效。我有一个while循环,但我认为它使程序转到最后一个用户。我尝试使用if语句,但只有第一个用户才能登录 if (username!=null && password!=null) { pagename = "main"; } else { username = request.getParameter("username"); password = request.getParameter("p
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";
}
}
}
这是如何导致的,我如何解决它?您正在将整个DB表复制到Java内存中,并在
中对所有记录进行循环比较。当与记录匹配时,您不会中止while
循环,因此它会继续在其余记录上循环,因此页面名每次都会被“start”覆盖
您需要添加一个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";
}
这更有效、更合理。您正在将整个DB表复制到Java内存中,并在中进行比较,同时对所有记录进行循环。当与记录匹配时,您不会中止while
循环,因此它会继续在其余记录上循环,因此页面名每次都会被“start”覆盖
您需要添加一个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";
}
这更有效、更合理。为什么要在整个表中循环执行此操作?如果你有1000000条记录呢?您应该使用WHERE子句查询数据库,并传递用户名和密码参数,然后只需检查是否有返回的行。为什么要循环整个表来执行此操作?如果你有1000000条记录呢?您应该使用WHERE子句查询数据库,并传递用户名和密码参数,然后简单地检查是否有返回的行。这是我们需要小心使用loops-1的情况之一;这可以通过使用调试器来解决…这是我们需要小心使用循环-1的情况之一;这可以通过使用调试器来解决…感谢您对mysql的解释谢谢您对mysql的解释