0

由于某种原因,登录仅适用于数据库中的最后一个用户。我有一个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";
            } 
    }
  }

这是如何引起的,我该如何解决?

4

2 回答 2

4

您正在将整个 DB 表复制到 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";
}

这样更有效,更明智。

于 2012-05-11T20:21:07.713 回答
0

为什么要遍历整个表来执行此操作?如果你有 1000000 条记录怎么办?您应该使用传递用户名和密码参数的 WHERE 子句查询数据库,然后简单地检查是否有返回的行。

于 2012-05-11T20:25:08.693 回答