【问题标题】:Is it possible for a ResultSet.next() to return empty even if the database is populated?即使填充了数据库,ResultSet.next() 是否有可能返回空?
【发布时间】:2015-12-14 12:19:33
【问题描述】:

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

在玩弄了我的代码之后(并进行了几次测试以检查 JDBC 驱动程序是否已加载并内置到类路径中),我认为该错误更多地与 ResultSet 没有返回我请求的特定行有关我的查询。我只是想知道这是常见的情况还是我的代码有误?

这是 Login 类的(编辑过的)代码:

    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);
    } 

非常感谢任何形式的帮助。谢谢!

【问题讨论】:

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

标签: java jdbc login


【解决方案1】:

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

解释可以在这里找到:Does form data still transfer if the input tag has no name?

【讨论】:

    【解决方案2】:

    解决了这个问题。查询是正确的,但结果集返回空,因为由于某种原因,无法读取来自输入名称 =“pword”的值(当我尝试将其值打印到控制台时返回 null),因此在数据库。认为它与输入密码有关(这很奇怪,因为它应该以这种方式工作)。我所做的是将输入类型更改为文本,并且可以正常工作,除了可以看到表单上密码字段中的字符。将其改回输入类型=密码,这以某种方式解决了我的问题。不知道为什么会这样,但重定向现在正在工作。谢谢@ErikP,您的帮助!

    【讨论】:

      猜你喜欢
      • 2017-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-10
      • 2016-12-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多