2013-11-09 68 views
2

我正在開發一個數據庫應用程序,我卡在一個地方。在android的sqlite數據庫onUpgrade

該方案是:我有一個數據庫,我維護數據庫的版本。 與應用程序版本相同。

現在我在版本1中實現數據庫。在版本1中創建了3個表。在版本2中,我通過添加一個表來升級數據庫。因此,查詢位於upgrade()中。

現在,如果用戶安裝版本2,該怎麼辦。onUpgrade()不會被調用,因爲沒有數據庫。因此,onCreate()將被調用,其後果將是它只會創建3個表。

我想在onCreate()中明確地調用onUpgrade()。但是很多在stackoverflow上的開發人員建議不要明確地調用它。

我完全滯留。

在此先感謝。

+0

爲什麼創建'onCreate'只有三個表? –

+0

感謝您的回覆。這只是一個例子。我想在我的應用程序中處理onUpgrade()方法 –

回答

0

我知道這是舊的文章,你肯定找到了解決辦法,但我發現這個問題的有效(upvoted)和它沒有得到答覆,這裏是我的2美分:

調用onUpgrade()onCreate()應該工作(我沒有測試它),但有一個更好的方法來組織你的幫手(見下面的片段)。關鍵是這兩種方法都只是切入點。

public class SampleDBHelper extends SQLiteOpenHelper { 

    private static final String DB_NAME = "mydatabase"; 
    private static final int DB_VERSION = 2; 

    public SampleDBHelper(Context context) { 
     super(context, DB_NAME, null, DB_VERSION); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     updateDatabase(db, 0, DB_VERSION); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     updateDatabase(db, oldVersion, newVersion); 
    } 

    private void updateDatabase(SQLiteDatabase db, int oldVersion, int newVersion) { 
     if (oldVersion < 1) { 
      // Create 3 initial tables 
     } 
     if (oldVersion < 2) { 
      // Create the new table 
     } 
    } 

} 

這種輔助性的優勢:

  • 你永遠需要改變onCreate()onUpgrade()方法,只有updateDatabase()
  • 對於每一個新版本,你只需要:
    • 增量DB_VERSION
    • 添加新的部分if (oldVersion < N) { // do the upgrade }

信用:從Head First Android Development強烈的啓發,黎明和大衛·格里菲斯,奧賴利,2015年