技術備忘録・キャリアの見直し・情報収集など。


SQLiteおさらい

AndroidSQLite。初歩の初歩おさらい。
アプリの勝手がまだまだわからない。追加機能でDBに変更ありましたー!とかって
どうやって検知してどうやって反映するのか。

忘れないうちにメモ。

続きを読む

SQLiteOpenHelperの継承クラス作成

まずはこれから。 SQLiteOpenHelperを継承したクラスを作成。

public class TestOpenHelper extends SQLiteOpenHelper {
    // データーベースのバージョン
    // これを上げていくことでDBのver.が上がった判定になる
    private static final int DATABASE_VERSION = 1;
    // データーベース名
    private static final String DATABASE_NAME = "TestDB.db";

    private Context mContext;

    TestOpenHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
        mContext = context;
    }

    // 指定されたデータベースが無い場合に、自動的に実行
    @Override
    public void onCreate(SQLiteDatabase db) {
        // テーブル作成
    }

    // 実際に存在しているデータベースのバージョンが違うときに実行
    // ※作成済みバージョン < 定数として宣言したバージョン
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){
        // テーブル追加など
    }
}

※バージョン比較はアプリ自体ではなく、あくまでもDBのバージョンで行われる

考えたこと

単純にDBのver.が上がるパターン

初期のDB構造が生成されている⇒アップデート時に追加した処理が反映される ⇒わかる
単純に追加だとか修正が乗っかるイメージ。

インストール時はver2.0以降だけどそもそも新規インストールのパターン

指定されたDBがない場合、onCreateがまず走る。
ので、そもそもバージョン比較まで話が至らない⇒onUpgrade呼ばれないのでは? (バージョン比較して差異がある場合に走るメソッドなので)

…ということは。

  • インストール用に、追加で組み込みたい処理もプラスした生成処理を記述(onCreate)

  • アップデート用に、追加で組み込みたい処理を単体で記述(onUpgrade)

みたいになるのかなー、と思って調べてみたらやっぱりそうだった。

意識しないとハマりそうなパターン

そしてonUpgradeに処理を書くとして、
「アップデートを保留にしていて、"ver.1⇒ver3"のように間を飛ばしてアップデートされる」
というケースの考慮も必要だった。なるほど。言われないとやらかしそう…。 追加処理に関しては、独立させて作っておいてonCreateからもonUpdateからも呼ぶとかにするとよいのかな。

参考サイト