AndroidのSQLiteのバージョンによる差分

More than 1 year has passed since last update.

だいぶ今更な内容ではありますが、Androidのバージョンによって搭載されているSQLiteのバージョンが異なります。

それによって一部仕様の違いがあり、場合によってはプログラムのかき分けが必要となります。


Androidに搭載されているSQLiteのバージョン

API level
SQLiteバージョン

14、15
3.7.4

16~20
3.7.11

他は以下を参照

AndroidでのSQLiteバージョン


3.7.4と3.7.11での差分


Bulk Insertの対応

SQLiteバージョン
対応

3.7.4
×

3.7.11

3.7.4ではBulk Insertに対応していないため、API level 15以下では以下の様なインサート文が書けない

INSERT INTO table (a, b, c) VALUES (1, 2, 3), (4, 5, 6), ....

そのため、API level 15と16以降を共存させる場合はクエリの書きわけが必要となる。

一行ずつのインサートはパフォーマンスがよくないためできるだけBulk Insertを用いるのがよいが

バージョンの差分により実行できないため、せめてトランザクションを貼ってのループ処理が良い。

トランザクションをはらずに一行ずつの実行は非常にコストが高い(一行の実行ずつにトランザクションが貼られてしまうため)。

public void insertAll(List<String> dataList) {

SQLiteDatabase db = ...;
...
db.beginTransaction();
for (String data : dataList) {
// インサート処理。Prepared StatementあるいはContentValuesなどを使用。
}
db.endTransaction();
}

参考