LoginSignup
9
7

More than 5 years have passed since last update.

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

Posted at

だいぶ今更な内容ではありますが、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();
}

参考

9
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
7