ContentProviderのupdate()内で呼ぶために、UPDATEで変更された行数を知らなければなりません。
しかし、SQLiteDatabaseクラスのexecSQL()は戻り値を返しません。
UPDATEを行う前に同条件で該当行数を調べておくべきでしょうか。
少し調べてみたところ、SQLiteStatement#executeUpdateDelete()を使えば変更された行数を返してくれるようです。
SQLiteStatementはSQLiteDatabase#compileStatement()で取得することが出来そうです。
しかし、このメソッドが追加されたのはAPI Level 11でした。
残念ながら現在開発中のアプリはAPI Level 9から対応させる予定のため、このメソッドは使えません。
もう少し調べてみたところ、SQLにchanges()というメソッドがあるようです。
UPDATEを実行した後、続けてchanges()のSQLを発行すれば良さそうです。
public static int changes(SQLiteDatabase db) {
Cursor cursor = null;
try {
cursor = db.rawQuery("select changes();", null);
if (cursor.moveToFirst()) {
return cursor.getInt(0);
}
} finally {
if (cursor != null) {
cursor.close();
}
}
return -1;
}
上記のようなメソッドを作成し試してみたところ、期待した結果が返ってきました。
(僕が知らないだけで標準のクラスやメソッドで出来たりするんだろうか…?)
とりあえずはこのメソッドを使っていこうと思います。