TitaniumのDBの作成と削除とスキーマの更新

ちょっと整理。

作成する

アプリ内で一から構築する方法と既存のDBをインストールする方法がある。

新しく作成する

openでDBを開くことができる。
その際にDBが存在しなければ新しく作成される。

var db = Ti.Database.open('userdata');

テーブルの作成はdb.executeを使ってSQLで直接CREATE TABLEする。

既存のDBをインストールする

SQLite3のDBをコピーしてデータベースを作成するinstallというメソッドがある。
マスタデータを入れたりするのに便利。

var db = Ti.Database.install('hoge_app_master.sqlite3', 'master');

この時dbはopenで開いたのと同じように操作できる。

すでにDBが存在する場合は上書きはされずopenと同じ挙動になるため、ユーザーデータを扱うDBの場合でも安心。
空のテーブルを作成済みのDBを用意すればコード内にCREATE TABLEを書かなくてもよいので楽。
(DBの分アプリの容量は増えるがテーブルが空のDBなら気にするほどのことはないはず)

削除する

removeで削除できる。

var db = Ti.Database.open('master');
db.close();
db.remove();

スキーマを更新する

削除してからインストールし直すか、SQLで更新するかの二択。

削除してからインストールし直す

ユーザーによる更新のないマスタデータのみのデータベースならばまるっと入れ替える方法が手っ取り早い。

var db = Ti.Database.open('master');
db.close();
db.remove();
db = Ti.Database.install('hoge_app_master.sqlite3', 'master');
SQLで更新する

ユーザーデータが存在する場合はdb.executeでDDLを実行する。

var db = Ti.Database.open('userdata');
db.execute("alter table hoge_table add column hoge integer");

Tips?

スキーマバージョンの管理

いずれの方法を採るにしろ、スキーマのバージョンをアプリケーションプロパティなどで管理しておいた方がいいと思う。

マスターデータとユーザーデータのDBを分ける

マスタの更新を楽にするために。

var dbMaster = Ti.Database.open('master');
var dbUserData = Ti.Database.open('userdata');

ミドルウェアライブラリなどを使おうとすると相性が出るかもしれない方法だけど。
そもそもミドルウェアライブラリがあるのかどうか知らないけど。

参考