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

Android SQLite 統計資料表行數:使用 COUNT(*) 查詢

     編輯:程式設計綜合問答

需求場景

快速取得 SQLite 資料表總行數,不需載入所有資料。

最佳方法:rawQuery COUNT(*)


SQLiteDatabase db = dbHelper.getReadableDatabase();
Cursor cursor = db.rawQuery("SELECT COUNT(*) FROM my_table", null);

int count = 0;
if (cursor.moveToFirst()) {
    count = cursor.getInt(0); // 第 0 欄即為 COUNT(*) 結果
}
cursor.close();
// count 即為 my_table 總行數

完整工具方法


public long getTableRowCount(SQLiteDatabase db, String tableName) {
    // 防 SQL 注入:驗證表名 (簡易示範)
    if (!tableName.matches("[a-zA-Z_][a-zA-Z0-9_]*")) {
        throw new IllegalArgumentException("Invalid table name: " + tableName);
    }
    
    String query = "SELECT COUNT(*) FROM " + tableName;
    Cursor cursor = null;
    try {
        cursor = db.rawQuery(query, null);
        if (cursor.moveToFirst()) {
            return cursor.getLong(0);
        }
        return 0;
    } finally {
        if (cursor != null) cursor.close();
    }
}

// 使用
long count = getTableRowCount(db, "my_table");

替代方案比較

方法效能適用場景
SELECT COUNT(*)最快 (只掃描索引/統計資訊)大量資料、頻繁查詢
DatabaseUtils.queryNumEntries(db, table)同上 (內部用 COUNT(*))簡潔 API、API 11+
cursor.getCount() (查詢所有行)極慢 (載入所有資料到 Cursor)**禁止用於統計行數**

DatabaseUtils 簡潔寫法


import android.database.DatabaseUtils;

long count = DatabaseUtils.queryNumEntries(db, "my_table");
// 等同於 SELECT COUNT(*),但更簡潔

進階:帶條件統計


// 統計符合條件的行數
public long countWhere(SQLiteDatabase db, String table, String whereClause, String[] whereArgs) {
    String query = "SELECT COUNT(*) FROM " + table + " WHERE " + whereClause;
    Cursor cursor = db.rawQuery(query, whereArgs);
    try {
        return cursor.moveToFirst() ? cursor.getLong(0) : 0;
    } finally {
        cursor.close();
    }
}

// 使用:統計 name 以 "A" 開頭的行數
long count = countWhere(db, "my_table", "name LIKE ?", new String[]{"A%"});

注意事項

  • 索引優化:大表統計時,WHERE 條件欄位應建立索引
  • 交易一致性:若在交易中統計,確認隔離級別
  • 關閉 Cursor:必須在 finally 區塊關閉,避免洩漏
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved