首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Java 註冊檢查用戶名:ResultSet 判斷邏輯錯誤修正

     編輯:程式設計疑難解答

錯誤代碼

String sql = "SELECT count(*) FROM 表名 WHERE name='" + username + "'";
ResultSet rs = stmt.executeQuery(sql);
if (rs == null) {  // 錯誤:ResultSet 永不為 null
    System.out.print("未註冊");
    addData();
} else {
    System.out.print("已註冊");
}

問題分析

  • executeQuery 返回的 ResultSet **永遠不為 null**,即使查無記錄也返回空游標。
  • SELECT COUNT(*) 總會返回一行(計數值),故 rs.next() 必為 true。
  • 應判斷計數值是否為 0。

修正代碼

String sql = "SELECT COUNT(*) FROM 表名 WHERE name = ?";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1, username);
ResultSet rs = ps.executeQuery();

if (rs.next()) {
    int count = rs.getInt(1);
    if (count == 0) {
        System.out.println("未註冊");
        addData();
    } else {
        System.out.println("已註冊");
    }
} else {
    System.out.println("查詢異常:無結果集");
}

進階建議

  1. 使用 PreparedStatement 防 SQL 注入。
  2. 若僅需存在性判斷,可改 SELECT 1 FROM 表名 WHERE name = ? LIMIT 1,配合 rs.next() 直接判斷,避免全表掃描計數。
  3. 關閉資源用 try-with-resources(JDK 7+):
try (PreparedStatement ps = conn.prepareStatement(sql);
     ResultSet rs = ps.executeQuery()) {
    // ...
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved