rawQuery で SUM もしくは TOTAL を使った場合、行、列ともに 1 の Cursor が返ってくるそうです。
テーブル名の指定方法や WHERE 句を使うかは場合によりますが、
以下サンプルコードです。
(SQLiteOpenHelper を継承したクラス内を想定して getReadableDatabase() を使用しています。)
SQLiteDatabase db = getReadableDatabase();
Cursor cursor = db.rawQuery(
String.format("SELECT SUM(%s) FROM %s WHERE %s = ? ",
COLUMN_POINT, TABLE_NAME, COLUMN_ID), new String[]{ String.valueOf(id) });
int point = 0;
if(cursor.moveToNext()){
point = cursor.getInt(0);
}
cursor.close();
db.close();
ちなみに SUM と TOTAL の違いは
- カラムの値が NULL だけだった場合、SUM は NULL を返す。TOTAL は 0.0 を返す。
- カラムの値が整数値のみだった場合、SUM は整数を返す。TOTAL は浮動小数点を返す。
という事らしいです。
cursor.getInt() は column の値が NULL だった場合 Exception を投げるような気がするので、NULL の可能性がある列で SUM を撮る場合は try catch で囲ったほうが良いのかもしれませんね。(そういう列で SUM を取っていないので未確認。)
cursor.getInt() は column の値が NULL だった場合 Exception を投げるような気がするので、NULL の可能性がある列で SUM を撮る場合は try catch で囲ったほうが良いのかもしれませんね。(そういう列で SUM を取っていないので未確認。)
参考 : Fetching a SQLite SUM in Java on Android、sum関数 / total関数
0 件のコメント:
コメントを投稿