代碼片段:
String sql = "select * FROM Login WHERE account ='" + account + "'";
// ...
if (Integer.parseInt(password.trim()) == Integer.parseInt(acount.getPassword().trim())) {
// ...
out.print(acount.getId().trim() == "員工"); // 錯誤:== 比較引用
}
PreparedStatement:String sql = "select * FROM Login WHERE account = ?";
ps.setString(1, account);acount.getId().trim() == "員工" 比較對象引用,**必須用 equals**:"員工".equals(acount.getId().trim())(防空指針)。數據庫存儲明文密碼極度危險,應存 BCrypt 哈希:
// 註冊
String hash = BCrypt.hashpw(password, BCrypt.gensalt());
// 登錄驗證
if (BCrypt.checkpw(inputPassword, storedHash)) { ... }
Integer.parseInt 比較密碼?密碼應為字符串,不可轉數字(導致前導零丟失、非數字報錯)。try-with-resources (JDBC 4.1+)。