しょうもないことでハマった。。
『新規テーブルの追加』はDBが作成されるタイミングか、アップロードするタイミングで行われる
と、いうことを知らなかった。
新しいモデルを追加するだけで勝手にテーブル作ってくれるのかな、と甘えていた。
なので、モデル追加してアプリ実行しても『no such table』とエラーが出ていた。
ActiveAndroidの処理を理解するためにソースを読む。
DB系の操作を一任されてそうなDataBaseHelper.java
を見てみる。
private void executeCreate(SQLiteDatabase db)
このメソッド内で
executeCreate
private void executeCreate(SQLiteDatabase db) {
db.beginTransaction();
try {
for (TableInfo tableInfo : Cache.getTableInfos()) {
db.execSQL(SQLiteUtils.createTableDefinition(tableInfo));
}
db.setTransactionSuccessful();
}
finally {
db.endTransaction();
}
}
ユーザが定義したテーブル情報をもとにして、テーブルを作っていた。
なので、このexecuteCreate
が呼ばれる場所を探す。
同クラスのonCreate
とonUpgrade
で呼ばれていた。
DBは既に作られているので、onCreateではなくonUpgradeを呼ばれるようにする必要がありました。
なので、
AwesomeApplication.java
Configuration.Builder builder = new Configuration.Builder(getBaseContext());
builder.setCacheSize(1024 * 1024 * 4);
builder.setDatabaseName("awesome.db");
// バージョンを1から2へアップグレード
builder.setDatabaseVersion(2);
ActiveAndroid.initialize(builder.create(), true);
ApplicationクラスのonCreateで上記のように書き換えた。
無事テーブルが追加されました。よかった。