[英]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.