我有验证功能,但是当我输入正确的登录名和密码时,即使数据正确,它总是显示数据不正确。
代码
private String login1;
private String password;
private String Username="";
private String Password="";
@Override
public void authentification() {
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
String url = "jdbc:mysql://localhost:3306/gestionticket" ; // a JDBC url
String user = "root";
java.sql.Connection connection = DriverManager.getConnection(url, user,"");
Statement instruction = (Statement) ((java.sql.Connection) connection).createStatement();
String sql = "select * from gestionticket.user " ;
ResultSet resultat = (ResultSet) instruction.executeQuery(sql);
while(resultat.next()){
Username = resultat.getString("login");
Password = resultat.getString("password");
}
if (login1.equals(Username) && password1.equals(Password)) {
System.out.println("Successful Login!\n----");
} else {
System.out.println("Incorrect \n----");
}
}
catch (Exception e) {
e.printStackTrace();
}
}
最佳答案
您正在将整个用户表从数据库拖入Java内存:
String sql = "select * from gestionticket.user " ;
ResultSet resultat = (ResultSet) instruction.executeQuery(sql);
然后您循环遍历每一行以提取登录名和密码:
while(resultat.next()){
Username = resultat.getString("login");
Password = resultat.getString("password");
}
在此行之后,用户名
和密码
变量将保存最后一行的值。
您现在可能会明白,只有用户表中最后插入的用户登录才会成功,因为您正在将登录信息与最后一行的值进行比较。
if (login1.equals(Username) && password1.equals(Password)) {
<小时/>
这整个方法毫无意义。您没有利用 SQL 的强大功能。您似乎不知道 WHERE
子句的存在。您应该只询问数据库用户是否存在。然后它将返回 1 条与登录信息匹配的记录,或者不返回任何内容。这是重写:
PreparedStatement instruction = connection.prepareStatement("select * from gestionticket.user where login = ? and password = ?");
instruction.setString(1, Username);
instruction.setString(2, Password);
ResultSet resultat = instruction.executeQuery();
if (resultat.next()) {
System.out.println("Successful Login!\n----");
} else {
System.out.println("Incorrect \n----");
}
请注意,您的代码存在比这更大的问题。您正在泄漏数据库资源。您似乎正在保存密码明文而不是散列。所有这些对 java.sql
接口(interface)的强制转换也没有意义。确保仅导入 java.sql
类,而不是数据库供应商特定的类。大写的实例/局部变量名称(例如 Username
和 Password
)也不会为您提供关于 Java 代码约定的额外分数。
关于java - Java 验证码不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25610848/