2016-06-26 5 views
0

私は以前のデータベースを新しいデータベースに置き換えたいと思います。それを行うには私はandroidのsqliteデータベースを置換する

  1. データベースの前のuser_versionを確認しています。
  2. 古いデータベースを削除しています。
  3. アセットから新しいデータベースをコピーします。
  4. 新しいデータベースのuser_versionを変更しています。
  5. 私の場合には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(); 
       } 
} 

答えて

0

古いデータベースの内容を気にしないならば、あなたもそれをアップグレードしようとしないはずです。単に新しいデータベースのバージョンに新しいファイル名を付けて、単純にコピーして(SQLiteAssetHelperを使用)、古いファイルを削除します。

+0

SQLiteAssetHelperをご紹介いただきありがとうございます。しかし時々私は古いデータベースからいくつかのレコードを取得する必要があります。私にとって奇妙なのは、user_versionの自動復帰です。それがなぜ起こるのか教えていただけますか? – user934820

+1

古いデータを保持する方法は[別の質問](http://stackoverflow.com/q/37094656/11654)です。とにかく、変更されていないのはあなたのコードの他のどこかのバグです。 –

+0

私は、アプリケーションをコンパイルする前に新しいデータベースのuser_versionを変更し、db.execSQL( "PRAGMA user_version = 1");を削除します。それは大丈夫でしょうか? – user934820

関連する問題