检查您的登录名和密码(Java Web、servlet)
我试图验证在JSP页面中输入的用户名和密码是否包含来自数据库的数据,所有参数是否都存在,但即使在匹配数据时,函数也会返回false。什么是我的错 这是我的密码:检查您的登录名和密码(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
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)){