2011-07-05 133 views
1

我有點困惑與Android SQLite數據庫處理。通過教程,但沒有得到確切的觀點。SQLite數據庫升級

我們可以擁有一個擴展SQLiteOpenHelper的數據庫類,並且可以覆蓋onCreate()方法並創建一個數據庫。

升級數據庫部分有點混亂。在下面的方法如何處理verions onUpdate(SQLiteDatabase db,int old Version,int newVerison)

是不是就意味着我們第一次創建數據庫意味着,如果我們要修改再次 老版本= 2,newVerison版本1然後修改一次,以便版本2 然後= 3
[onUpdate(SQLiteDatabase db,int old Version,int newVerison)]

此方法將是當我們通過構造版本,如在下面的代碼(如2)執行

public DatabaseHelper(Context context) { 
    super(context, dbName, null,2); 
} 

我需要知道,當我們需要調用onUpgrade()方法,我們應該通過版本2總是或我們要增加一個每次的以前版本

回答

0

我用this approach使數據庫架構演變更容易一點,你可能會發現它太有用。

+0

是的,但是當我們需要升級數據庫時,你能解釋如何管理版本嗎?這是否意味着我們第一次創建數據庫意味着版本1.然後修改一次,直到版本2.然後,如果我們想再次修改舊版本= 2,newVerison = 3或每次需要調用onUpgrade()方法時都必須在構造函數中將pass版本設置爲2 – JibW

0

它完全取決於你如何維護數據庫的版本。您可以在更改表格結構或修改內容後更改您的版本。維護版本控制並沒有硬性規定。它取決於項目的要求。

+0

是的,但是當我們需要升級數據庫時,您能否解釋如何管理版本?這是否意味着我們第一次創建數據庫意味着版本1.然後修改一次,直到版本2.然後,如果我們想再次修改舊版本= 2,newVerison = 3或每次需要調用onUpgrade()方法時都必須在構造函數中傳遞版本爲2 – JibW

8

每次模式更改時增加數據庫版本。

您不需要直接撥打onUpgrade。當您打開數據庫時,Android會根據需要調用它,方法是將數據庫的版本與您的代碼指定的版本作爲當前版本進行比較。

你只需要處理升級過程中onUpgrade - 它可能會去是這樣的:

int curVer = oldVersion; 
while (curVer < newVersion) { 
    curVer++; 
    switch (curVer) { 
     case 2: { 
      // Upgrade from V1 to V2 
      break; 
     } 
     case 3: { 
      // Upgrade from V2 to V3 
      break; 
     } 
     case 4: { 
      // Upgrade from V3 to V4 
      break; 
     } 
    } 
} 

比方說你NEWVERSION是4和oldVersion是1 - 第一次迭代將增加CURVER爲2,將運行V2到V3的升級代碼。第二次迭代將curVer增加到3並運行V2到V3的升級代碼,最後一次迭代將curVer增加到4並運行V3到V4的升級代碼。

這適用於小於newVersion的所有oldVersion值。並且如果用戶正在跳過應用程序的升級,則會通過中間版本順序升級。

+0

你能告訴我,如何在更新數據時保留數據。 –

+1

@PratikButani升級時不需要刪除任何東西。簡單的模式更改(例如添加列或表)不會直接影響現有數據,更復雜的更新通常會將原始數據複製到臨時表中,然後在那裏進行轉換,並在準備就緒時刪除原始表並重命名臨時表。 – RivieraKid

+0

謝謝,我明白了,但有什麼辦法可以處理所有的版本,比如一些使用v1或者一些是v2。我該如何處理。 –