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

Android SQLite 判斷記錄是否存在:使用 Cursor.getCount() 而非 null 判斷

     編輯:程式設計綜合問答

錯誤代碼

Cursor c = db.rawQuery("SELECT * FROM table WHERE id=?", new String[]{id});
if (c == null) { // 錯誤:Cursor 永不為 null,無結果時 getCount()==0
    // 插入
}

正確判斷

Cursor c = db.rawQuery("SELECT * FROM " + TABLE + " WHERE " + COL_ID + "=?", new String[]{id});
boolean exists = (c.getCount() > 0);
c.close(); // 及時關閉

if (exists) {
    Toast.makeText(this, "已存在", Toast.LENGTH_SHORT).show();
} else {
    // 插入邏輯
}

優化:使用 EXISTS 子查詢

Cursor c = db.rawQuery("SELECT EXISTS(SELECT 1 FROM " + TABLE + " WHERE " + COL_ID + "=?)", new String[]{id});
boolean exists = false;
if (c.moveToFirst()) {
    exists = (c.getInt(0) == 1);
}
c.close();

只返回 0/1,無需加載完整行數據,性能更好。

最佳實踐

  • 始終在 `finally` 或 `try-with-resources` 中關閉 Cursor。
  • 若頻繁判斷存在性,考慮添加 **唯一索引**,插入時捕獲 `SQLiteConstraintException` 替代查詢。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved