簡體   English   中英

即使填充了數據庫,ResultSet.next()是否也可能返回空?

[英]Is it possible for a ResultSet.next() to return empty even if the database is populated?

我問了一個有關我正在Eclipse上開發的JDBC Login應用程序的問題,但無法識別我在表單中輸入的憑據。 您可能需要先閱讀該書 ,以了解我的問題。

在遍歷我的代碼(並進行了幾次測試以檢查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);
    } 

任何幫助都將不勝感激。 謝謝!

在修改問題之前,您可能會看到,您正在從請求中讀取憑據。 您是否檢查了用戶名和密碼是否包含正確的值(在控制台上將其注銷)? 昨天,我在您的其他問題中更新了答案。 您的輸入字段沒有名稱,因此當您嘗試將它們從請求中刪除時,用戶和密碼的值可能為空。

可以在此處找到解釋: 如果輸入標簽沒有名稱,表單數據是否仍在傳輸?

解決了這個。 該查詢是正確的,但是ResultSet返回空,因為由於某種原因,無法讀取輸入名稱=“ pword”的值(當我嘗試將其值打印到控制台時返回null),因此在數據庫。 以為它與輸入密碼類型有關(這很奇怪,因為它應該這樣工作)。 我所做的是將輸入類型更改為文本,並且可以正常工作,只是可以看到表單上密碼字段中的字符。 將其更改回輸入類型=密碼,從而以某種方式解決了我的問題。 不知道為什么會這樣,但是重定向現在正在起作用。 感謝@ErikP,為您提供幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM