我已經成功將我的Java應用程序連接到MySQL,然後我希望用戶輸入他們的用戶名和密碼。然後它會向MySQL發送一個查詢,然後用該用戶名查找一個地點,然後將給定的密碼與數據庫中的密碼進行比較。 大多數情況下,這是有效的。假設用戶名是「ABC」,密碼是「def」。如果提示輸入用戶名,並輸入「ABC def」,則說明它成功,與密碼「def a」相同。我相信問題是rs.next(),它只檢查空間前的任何文本。Java&MySQL - 創建登錄驗證
解決方案的任何想法?
String databaseUsername = "";
String databasePassword = "";
// Check Username and Password
System.out.print("Enter Username: ");
String name = sc.next();
System.out.print("Enter Password: ");
String password = sc.next();
// Create SQL Query
Statement stmt = connection.createStatement();
String SQL = "SELECT * FROM users WHERE users_name='" + name + "' && users_password='" + password+ "'";
ResultSet rs = stmt.executeQuery(SQL);
// Check Username and Password
while (rs.next()) {
databaseUsername = rs.getString("users_name");
databasePassword = rs.getString("users_password");
}
if (name.equals(databaseUsername) && password.equals(databasePassword)) {
System.out.println("Successful Login!\n----");
} else {
System.out.println("Incorrect Password\n----");
}
使用'PreparedStatement'來避免SQL注入。另外,什麼是不工作? – 2013-03-01 19:08:21
1)不要存儲明文密碼,將它們散列。 2)如果你得到任何記錄,那麼用戶名和密碼匹配,所以不需要進一步檢查(你不需要從數據庫中獲取值並在java中匹配它)。 – SJuan76 2013-03-01 19:09:08
更大的問題是,如果您在提示輸入用戶名時在一行中鍵入用戶名和密碼 - >「ABC def」,則表示登錄成功。我希望它是兩個步驟。所以「ABC def」不會是一個正確的用戶名,「ABC」是。 – 2013-03-01 19:11:49