登录仅适用于数据库中的最后一个用户

时间:2012-05-11 20:19:54

标签: java mysql jdbc

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

这是如何引起的?如何解决?

2 个答案:

答案 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子句查询数据库,然后检查是否有返回的行。