0
私は以前のデータベースを新しいデータベースに置き換えたいと思います。それを行うには私はandroidのsqliteデータベースを置換する
- データベースの前のuser_versionを確認しています。
- 古いデータベースを削除しています。
- アセットから新しいデータベースをコピーします。
- 新しいデータベースのuser_versionを変更しています。
- 私の場合には1
ある新しいuser_versionを確認しかし、私は再起動したとき、それは新しいuser_versionとして「1」を保存していないのはなぜアプリケーションuser_versionは0に再度変更?または、私は、アプリケーションをコンパイルする前に新しいデータベースのuser_versionを変更する必要があります。
ここに私のコードです。
MySQLiteHelper db = MySQLiteHelper.instance();
int oldversion = db.getInteger("PRAGMA user_version");
Toast.makeText(MainActivity.this,oldversion + "", Toast.LENGTH_SHORT).show();
if (oldversion < 1) {
upgradeDB();// delete previous db and copy new one.
db.execSQL("PRAGMA user_version = 1");
int oldversion = db.getInteger("PRAGMA user_version");
Toast.makeText(MainActivity.this,oldversion + "", Toast.LENGTH_SHORT).show();
}
編集
void upgradeDB(){
db.renameDataBase();
db.copyDataBase();
db = MySQLiteHelper.instance();
MySQLiteUpdateHelper dbOld = MySQLiteUpdateHelper.instance();
int saved = dbOld.getInteger("select value from info where name='saved'");
int bookmark = dbOld.getInteger("select value from info where name='bookmarks'");
db.execSQL("UPDATE info set value = '" + saved + "' WHERE name = 'saved'");
db.execSQL("UPDATE info set value = '" + bookmark + "' WHERE name = 'bookmarks'");
File to = new File(db.DB_PATH, "old");
if (to.exists()) {
to.delete();
}
}
SQLiteAssetHelperをご紹介いただきありがとうございます。しかし時々私は古いデータベースからいくつかのレコードを取得する必要があります。私にとって奇妙なのは、user_versionの自動復帰です。それがなぜ起こるのか教えていただけますか? – user934820
古いデータを保持する方法は[別の質問](http://stackoverflow.com/q/37094656/11654)です。とにかく、変更されていないのはあなたのコードの他のどこかのバグです。 –
私は、アプリケーションをコンパイルする前に新しいデータベースのuser_versionを変更し、db.execSQL( "PRAGMA user_version = 1");を削除します。それは大丈夫でしょうか? – user934820