2016-06-26 123 views
0

我想用新的數據庫替換以前的數據庫。要做到這一點我是替換android中的sqlite數據庫

  1. 檢查以前的user_version數據庫。
  2. 刪除舊數據庫。
  3. 從資產中複製新的數據庫。
  4. 更改新數據庫的user_version。
  5. 驗證新user_version這在我的情況是1

但是,當我重新啓動應用程序user_version再次變爲0,爲什麼它不保存「1」作爲新user_version?或者在編譯應用程序之前,我必須更改新數據庫的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