【Android】テーブルのレコード数を簡単に取得する


AndroidでSQLiteを使っている場合、時々あるテーブルのレコード数を取得したい時がある。
レコード数を取得したい場合、以下のようなパターンが考えられます。

  • テーブルのレコード数が全部で何件あるか知りたい
  • テーブル内で特定の条件に合うレコード数が何件あるか知りたい

という場合に、android.database.DatabaseUtilsクラスのqueryNumEntriesメソッドを使えば簡単にレコード数が取得できる。

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メソッドを使った方が断然楽です!

ということで、今まで自分でガリガリ実装していた人はこっちも使ってみるといいと思います!
ちなみに、私はこれを知るまでガリガリ自分で実装してました…(笑)