AndroidでSQLiteを使っている場合、時々あるテーブルのレコード数を取得したい時がある。
レコード数を取得したい場合、以下のようなパターンが考えられます。
- テーブルのレコード数が全部で何件あるか知りたい
- テーブル内で特定の条件に合うレコード数が何件あるか知りたい
という場合に、**android.database.DatabaseUtilsクラスの[queryNumEntries](http://developer.android.com/reference/android/database/DatabaseUtils.html#queryNumEntries(android.database.sqlite.SQLiteDatabase, java.lang.String))**メソッドを使えば簡単にレコード数が取得できる。
DatabaseUtils#queryNumEntriesメソッド
使い方はとても簡単。
// db=SQLiteDatabase User.TABLE_NAME=users
long recodeCount = DatabaseUtils.queryNumEntries(db, User.TABLE_NAME);
Log.d(TAG, "recodeCount : " + recodeCount);
引数にSQLiteDatabaseとテーブル名を渡すことで、テーブルのレコード数が取得できます。
内部的には以下のようなSQL文が実行されています。
SELECT COUNT(*) FROM users
テーブル内で特定の条件に合うレコード数が何件あるか知りたい
これもqueryNumEntriesメソッドを使うことで取得できます。
引数にWhere句を指定できるようにもなっているので、特定の条件に合うレコード数も簡単に取得できます。
例えば、画像のPathを保存しているimageテーブルがあったとして、pngの画像が何件あるか知りたい場合は以下のような感じ。
// db=SQLiteDatabase Image.TABLE_NAME=images type=TEXT
long recodeCount = DatabaseUtils.queryNumEntries(db, Image.TABLE_NAME,"type = '?'",new String[]{ "png" });
Log.d(TAG, "recodeCount : " + recodeCount);
内部的には以下のようなSQL文が実行されています。
SELECT COUNT(*) FROM images WHERE type = 'png'
まとめ
レコード数の取得は自分で実装することも可能ですが、**android.database.DatabaseUtilsクラスの[queryNumEntries](http://developer.android.com/reference/android/database/DatabaseUtils.html#queryNumEntries(android.database.sqlite.SQLiteDatabase, java.lang.String))**メソッドを使った方が断然楽です!
ということで、今まで自分でガリガリ実装していた人はこっちも使ってみるといいと思います!
ちなみに、私はこれを知るまでガリガリ自分で実装してました…(笑)