余白

https://blog.lacolaco.net/ に移転しました

ormliteで新しくテーブルを追加するときの注意点

現在開発中の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));

このようにすることで明示的にテーブルを作成できました。
正攻法ではないかもしれないですが念のため。