Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
不正确的Java身份验证代码_Java_Jdbc - Fatal编程技术网

不正确的Java身份验证代码

不正确的Java身份验证代码,java,jdbc,Java,Jdbc,我有一个身份验证功能,但当我输入正确的登录名和密码时,它总是显示数据不正确,即使它是正确的 代码 private String login1; private String password; private String Username=""; private String Password=""; @Override public void authentification() { try { Class.forName("

我有一个身份验证功能,但当我输入正确的登录名和密码时,它总是显示数据不正确,即使它是正确的

代码

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");  
}
在此行之后,
Username
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
接口上的所有这些强制转换也没有意义。确保只导入
java.sql
类,而不是特定于DB供应商的类。大写的实例/局部变量名称,如
Username
Password
也不会给您提供Java代码约定方面的额外分数。

您正在将整个用户表从数据库拖到Java内存中:

String sql = "select * from gestionticket.user " ;    
ResultSet resultat  = (ResultSet) instruction.executeQuery(sql);
然后在每一行上循环提取登录名和密码:

while(resultat.next()){
    Username = resultat.getString("login");
    Password = resultat.getString("password");  
}
在此行之后,
Username
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
接口上的所有这些强制转换也没有意义。确保只导入
java.sql
类,而不是特定于DB供应商的类。大写的实例/局部变量名称,如
Username
Password
也不会给您提供Java代码约定方面的额外分数。

您正在将整个用户表从数据库拖到Java内存中:

String sql = "select * from gestionticket.user " ;    
ResultSet resultat  = (ResultSet) instruction.executeQuery(sql);
然后在每一行上循环提取登录名和密码:

while(resultat.next()){
    Username = resultat.getString("login");
    Password = resultat.getString("password");  
}
在此行之后,
Username
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
接口上的所有这些强制转换也没有意义。确保只导入
java.sql
类,而不是特定于DB供应商的类。大写的实例/局部变量名称,如
Username
Password
也不会给您提供Java代码约定方面的额外分数。

您正在将整个用户表从数据库拖到Java内存中:

String sql = "select * from gestionticket.user " ;    
ResultSet resultat  = (ResultSet) instruction.executeQuery(sql);
然后在每一行上循环提取登录名和密码:

while(resultat.next()){
    Username = resultat.getString("login");
    Password = resultat.getString("password");  
}
在此行之后,
Username
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
接口上的所有这些强制转换也没有意义。确保只导入
java.sql
类,而不是特定于DB供应商的类。大写的实例/局部变量名,如
Username
Password
也不会给您提供Java代码约定方面的额外分数。

:我想将inputText的内容与数据库号中的数据进行比较。你不应该。DB已经通过
WHERE
实现了这一点。或者,如果DB返回与给定用户名/密码匹配的正确记录,您不信任它吗?为什么不呢?:我想将inputText的内容与dbNo中的数据进行比较。你不应该。DB已经通过
WHERE
实现了这一点。或者,如果DB返回与给定用户名/密码匹配的正确记录,您不信任它吗?为什么不呢?:我想将inputText的内容与dbNo中的数据进行比较。你不应该。DB已经通过
WHERE
实现了这一点。或者如果DB返回正确的记录matc,您不信任它吗