Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.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 即使填充了数据库,ResultSet.next()是否也可能返回空值?_Java_Jdbc_Login - Fatal编程技术网

Java 即使填充了数据库,ResultSet.next()是否也可能返回空值?

Java 即使填充了数据库,ResultSet.next()是否也可能返回空值?,java,jdbc,login,Java,Jdbc,Login,我问了一个关于我在Eclipse上开发的JDBC登录应用程序的问题,该应用程序无法识别我在表单中输入的凭据。你可能想先了解一下我的问题 在处理了我的代码(并做了一些测试来检查JDBC驱动程序是否已加载并内置到类路径中)之后,我发现错误更多地与ResultSet没有返回我从查询中请求的特定行有关。我只是想知道这是一个常见的现象还是我的代码有误 以下是登录类的(已编辑)代码: String driver = "com.mysql.jdbc.Driver"; String url =

我问了一个关于我在Eclipse上开发的JDBC登录应用程序的问题,该应用程序无法识别我在表单中输入的凭据。你可能想先了解一下我的问题

在处理了我的代码(并做了一些测试来检查JDBC驱动程序是否已加载并内置到类路径中)之后,我发现错误更多地与ResultSet没有返回我从查询中请求的特定行有关。我只是想知道这是一个常见的现象还是我的代码有误

以下是登录类的(已编辑)代码:

    String driver = "com.mysql.jdbc.Driver";
    String url = "jdbc:mysql://localhost:3306/game"+"?verifyServerCertificate=false"+"&useSSL=true";
    String user = "root"; 
    String pass = "password";
    String sql = "SELECT username, password FROM player WHERE username = ? AND password = ?";

    String username = "uname";
    String password = "pword";

    try {
        Class.forName(driver);
        Connection connection = DriverManager.getConnection(url, user, pass);
        PreparedStatement statement = connection.prepareStatement(sql);
        statement.setString(1, username);
        statement.setString(2, password);

        ResultSet resultSet = statement.executeQuery();
        boolean loginSuccess = false;

        while (resultSet.next()) {
            loginSuccess = true;
            System.out.println("Congrats! You are logged in as " + resultSet.getString("username") + ".");
        }
    } catch (Exception e) {
        throw new RuntimeException("Login failed", e);
    } 

非常感谢您的任何帮助。谢谢大家!

在编辑问题之前,可以看到您正在从请求中读取凭据。您是否检查用户名和密码是否包含正确的值(在控制台上注销)?昨天我更新了你另一个问题的答案。在那里,您的输入字段没有名称,因此当您试图从请求中获取用户名和密码时,它们的值可能为空


可以在这里找到解释:

解决了这个问题。查询是正确的,但是ResultSet返回空的,因为出于某种原因,无法读取input name=“pword”中的值(当我尝试将其值打印到控制台时返回null),因此在数据库中找不到匹配项。我认为这和输入密码有关(这很奇怪,因为它应该是这样工作的)。我所做的是将输入类型改为文本,这很有效,除了可以看到表单上密码字段中的字符。把它改回输入类型=密码,不知怎么解决了我的问题。不知道为什么会发生这种情况,但重定向现在正在工作。谢谢,@ErikP,谢谢你的帮助

当然。如果您的where子句不返回matches@Stultuske奇怪的是,我100%确定我的SQL查询是正确的。我觉得这和我的代码有关,但我看不出哪里做错了。你调试过代码吗?你确定你的连接信息是正确的吗?@Stultuske这是我不确定的。你能看一下我的密码并仔细检查一下吗?。。。不,我没有你的数据库,我不知道你提供了什么输入。。。