現在開発中のAndroid用ツイッタークライアントの中でデータベースの管理ライブラリとしてormliteを使っているのですが、元々テーブルを一つ作っていたものにアップデートでテーブルを追加する必要が出てきました。
なので最初にテーブルを作った時と同じようにOrmLiteSqliteOpenHelper継承クラスのonCreateでテーブルを作ろうとしたのですがうまくいきません
public void onCreate(SQLiteDatabase arg0, ConnectionSource arg1) { try { TableUtils.createTableIfNotExists(arg1, A.class); TableUtils.createTableIfNotExists(arg1, B.class); } catch (Exception e) { e.printStackTrace(); } }
おかしいなと思い調べてみるとこのOrmLiteSqliteOpenHelperのonCreateはデータベースファイルが存在しない場合のみ、つまり最初の最初にしか自動で呼ばれないようです。
なので解決するために明示的に呼んでみました。
ApplicationのContextのインスタンスが使える場所でこのようにしました。DataBaseHelperは上のonCreateを実装したOrmLiteSqliteOpenHelperを継承したクラスです。
DataBaseHelper helper = new DataBaseHelper(app); helper.onCreate(SQLiteDatabase.openOrCreateDatabase(DB_PATH, null));
このようにすることで明示的にテーブルを作成できました。
正攻法ではないかもしれないですが念のため。