2016-09-16 53 views
0

對於SQLiteOpenHelper,如果我裏面添加onCreate新表做我必須做的裏面onUpgrade什麼?我正在添加一個全新的表格。我相信我必須更改版本號,但onUpgrade應保持空白。那是對的嗎?添加新表的SQLite

+0

您是否已經發布過您的應用程序的早期版本? –

+0

是的,我有:)。 –

回答

2

如果您希望應用程序的現有安裝添加此新表,那麼是的,您必須增加該版本並提供合適的onUpgrade()實施,並在onCreate()(您聲明您已完成)中添加該表, 。

onUpgrade()實現是不夠的;它必須實際做一些事情。有些人會刪除所有表格,直接撥打onCreate(),但如果您想要保留現有數據,這顯然不起作用。我通常使用成熟的switch成語,因此如果用戶不止一個版本(例如,您發佈版本3並且用戶仍在版本1上),他們將按順序執行所有必要的升級:

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    switch (oldVersion) { 
     case 1: 
      db.execSQL("CREATE TABLE " + ...); 
      // no break statement, so case 2 will execute after this. 
     case 2: 
      // more execSQL(), etc 
    } 
} 
+0

請注意,如果你只是在開發(所以沒有人有應用程序),你可以跳過升級,只做'onCreate()',但你必須刪除數據庫,以便重新創建。您可以通過卸載並重新安裝,或在設置>應用程序中查找應用程序並在其中清除其數據來完成此操作。 – Karakuri

0

只有在增加版本號時纔會調用onUpgrade。

要實現它,你必須重新創建你所做的任何更改表並複製了所有現有數據。這個主題有很多教程。

沒有必要來實現,如果你還在學習,但如果你不這樣做,你讓你的架構進行任何更改,您需要卸載從設備的應用程序或更改將不會被應用。如果用戶已經安裝您的應用程序之前

1

onCreate()不會被調用。所以你也需要在onUpgrade()中創建新表。一定要增加數據庫的版本號。

我建議把代碼放在一個輔助方法來創建表,這樣就可以從兩個回調方法調用它。如果您需要更改代碼以創建表格,這將減少發生錯誤的可能性。

+0

好點。謝謝。 +1 –