SQLiteおさらい
AndroidでSQLite。初歩の初歩おさらい。
アプリの勝手がまだまだわからない。追加機能で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からも呼ぶとかにするとよいのかな。