2010-10-14 116 views
10

我已經基本完成開發一個Android應用程序,它使用SQLite數據庫,我複製到設備上的用戶數據區域,例如/data/data/com.company.app/databases/users .dbAndroid處理應用程序更新和數據庫更改

我不確定市場應用程序更新過程如何發生,我也不確定如何測試它。

我目前正在檢查數據庫是否存在於設備上,如果沒有,則複製它(通常只在首次啓動時纔會出現)。如果我在更新的應用程序中有新版本的數據庫,會發生什麼情況?市場更新會擦除用戶數據,以便在下次啓動時複製我的新數據庫?

如果我將數據庫更改/添加記錄/ etc並將其與新應用程序打包,將來會發生什麼?這個數據庫不會覆蓋舊的數據庫嗎?

否則,爲避免在每次啓動時從應用程序包複製和覆蓋數據庫,是否有方法檢查數據庫文件的大小和日期,並且只有在數據庫中的數據庫較新時才能複製數據庫文件的大小和日期?

如果有人需要澄清,請詢問。

回答

12

我正在做類似的事情。我所做的是設置數據庫版本,然後當我檢查數據庫是否存在時,我也要確保它是正確的版本。如果不是,我保存數據庫中的用戶收藏夾,擦除並重新複製數據庫,然後放回用戶收藏夾。

這是我上升級

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    if (oldVersion == 2) { 

     System.out.println("Performing upgrade!"); 
     openDataBase(); 
     // save the old favorites 
     Cursor mCursor = getFavorites(); 
     ArrayList<Stop> favs = allCursorToStops(mCursor); 
     mCursor.close(); 

     deleteRecreate(db); 

     openDataBase(); 

     for (int i = 0; i < favs.size(); i++) 
      setFavorite(favs.get(i)); 

     close(); 

    } else { 

     deleteRecreate(db); 

    } 
} 

這裏就是我檢查存在/如果需要升級等

boolean dbExist = checkDataBase(); 

    if(dbExist){ 
     // check if we need to upgrade 
     openDataBase(); 
     int cVersion = myDataBase.getVersion(); 
     close(); 
     if(cVersion != VERSION) 
      onUpgrade(myDataBase, myDataBase.getVersion(), VERSION); 
+1

以及如何onUpgrade(..)被調用? – Nativ 2013-04-30 11:42:14

+0

@powerX onUpgrade在您增加數據庫版本號時自動調用。 – ariets 2013-08-25 19:49:54

+0

是的,在它之後。謝謝 – Nativ 2013-08-26 07:54:55

相關問題