assets フォルダー内に大きなデータベースを含むアプリを出荷したいと考えています。Android SQLiteAssetHelperがこれに対する解決策のようです。
ただし、このアプリは ormlite も使用しており、データベースのテーブルにマップする多数の Java オブジェクトがあります。ormlite で事前入力されたデータベースを使用するにはどうすればよいですか?
assets フォルダー内に大きなデータベースを含むアプリを出荷したいと考えています。Android SQLiteAssetHelperがこれに対する解決策のようです。
ただし、このアプリは ormlite も使用しており、データベースのテーブルにマップする多数の Java オブジェクトがあります。ormlite で事前入力されたデータベースを使用するにはどうすればよいですか?
OrmLiteSqliteOpenHelper を拡張する独自の SqliteOpenHelper を作成し、内部で SQLiteAssetHelper にあるコードをコピーしました。
SQLiteAssetHelper を取り除き、データベース(存在しない場合) を(ormlite がデータベースを生成するフォルダー) にコピーするこのDatabaseInitializer クラスを実装できます。data/data/yourapp/databases/yourdb.db
DatabaseHelper コンストラクターで:
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
DatabaseInitializer initializer = new DatabaseInitializer(context);
try {
initializer.createDatabase();
initializer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
クリーンでシンプルなソリューション
いくつかのマイナーな短所:
- Android 2.2.3 以降でのみ動作します
- サイズに注意してください (3 MB では問題は発生しませんでした)