.db ファイルがあり、Android アプリケーションの最初の実行時にセットアップしたいと考えています。OrmLite を使用してデータベースを管理しています。
その .db ファイルには約 7000 のレコードがあり、一般的な方法 (foreach - create コマンドを使用) でインポートする場合、インポートに時間がかかります (約 2-3 分)。
どうすればこの問題を解決できますか?
ありがとう
「 」という名前のデータベースがprepared.db
あり、パッケージ名が「com.example.android
」であるとします。これが私がすることです。
(ステップ 2 と 3 の両方がコンストラクター内で発生します)
これはコードサンプルであり、私にとってはうまくいきます。
public class DatabaseHelper extends OrmLiteSqliteOpenHelper {
private static final String DATABASE_NAME = "prepared.db";
private static final String DATABASE_PATH = "/data/data/com.example.android/databases/";
public DatabaseHelper(Context context) {
super(context, DATABASE_PATH+DATABASE_NAME, null, DATABASE_VERSION);
boolean dbexist = checkdatabase();
if (!dbexist) {
// If database did not exist, try copying existing database from assets folder.
try {
File dir = new File(DATABASE_PATH);
dir.mkdirs();
InputStream myinput = mContext.getAssets().open(DATABASE_NAME);
String outfilename = DATABASE_PATH + DATABASE_NAME;
Log.i(DatabaseHelper.class.getName(), "DB Path : " + outfilename);
OutputStream myoutput = new FileOutputStream(outfilename);
byte[] buffer = new byte[1024];
int length;
while ((length = myinput.read(buffer)) > 0) {
myoutput.write(buffer, 0, length);
}
myoutput.flush();
myoutput.close();
myinput.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
/*
* Check whether or not database exist
*/
private boolean checkdatabase() {
boolean checkdb = false;
String myPath = DATABASE_PATH + DATABASE_NAME;
File dbfile = new File(myPath);
checkdb = dbfile.exists();
Log.i(DatabaseHelper.class.getName(), "DB Exist : " + checkdb);
return checkdb;
}
}
PS : データベース ファイルのサイズが 1 MB を超えると、エラーが発生します。このような問題を解決するために、データベースを分割できます。