检查您的登录名和密码(Java Web、servlet)

检查您的登录名和密码(Java Web、servlet),java,database,servlets,if-statement,Java,Database,Servlets,If Statement,我试图验证在JSP页面中输入的用户名和密码是否包含来自数据库的数据,所有参数是否都存在,但即使在匹配数据时,函数也会返回false。什么是我的错 这是我的密码: public class LoginService { public boolean loginCheck(String username, String password){ String query; String dbUsername, dbPassword; boolean

我试图验证在JSP页面中输入的用户名和密码是否包含来自数据库的数据,所有参数是否都存在,但即使在匹配数据时,函数也会返回false。什么是我的错

这是我的密码:

public class LoginService {
    public boolean loginCheck(String username, String password){
        String query;
        String dbUsername, dbPassword;
        boolean login = false;

        try {
            Class.forName("com.mysql.jdbc.Driver").newInstance();
            Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/blog_u", "root", "root");
            Statement stmt = (Statement) con.createStatement();
            query = "SELECT username, password FROM user;";
            stmt.executeQuery(query);
            ResultSet rs = stmt.getResultSet();

            while(rs.next()){
                dbUsername = rs.getString("username");
                dbPassword = rs.getString("password");

                if(dbUsername == username && dbPassword == password){
                    System.out.println("OK");
                    login = true;
                }
                System.out.println(username + password + " " + dbUsername + dbPassword);
            }
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return login;
    }
}
应改为

if(dbUsername.equals(username) && dbPassword.equals(password)){

在java中不应使用
=
比较字符串。请参阅。

不要将字符串与
=
进行比较。使用方法
equals()
密码不应存储在字符串中。或者(在这种情况下,因为您有纯文本密码),让数据库为您比较它们。在SQL查询中添加一个带有用户名和密码的
where
子句,并检查它是否返回了一些内容。如果是的话,用户的详细信息是正确的。谢谢,我现在知道实际问题比这更大。您正在将整个DB表拖到Java内存中,并将每一行与输入进行比较。这是非常低效的。您没有理解/利用SQL语言的强大功能。编写SQL查询时,应确保它能准确返回您要查找的数据。开始学习如何使用
WHERE
子句。正确使用时,DB将返回0或1条记录。然后,您只需执行
login=rs.next()。或者,对于给定的
WHERE
,您不信任数据库返回所需的数据吗?
if(dbUsername.equals(username) && dbPassword.equals(password)){