2012-06-12 61 views
2

比方說,我有一個SQLite數據庫,我在一個單獨的程序中創建,幷包含在應用程序啓動時要複製的資產文件夾中(假設它尚不存在)。該數據庫包含兩列A和B.假設A包含位置列表(巴黎,倫敦,紐約等 - 用戶無法編輯的內容),B存儲用戶訪問相應位置的次數(用戶可以從應用內編輯)。Android SQLite:使用onUpgrade更新數據?

現在,讓我們說我設法拼出我的原始數據庫中的位置錯誤的名稱。我進入我的SQLite瀏覽器,快速修復該條目,保存它,並替換我的資產文件夾中的舊數據庫文件。如何更新已經複製的數據庫中的列A,以反映我對assets文件夾中現在只讀數據庫所做的更改,而不擦除其存儲的數據?

我最初的印象是使用onUpgrade,但我看到有人說這只是爲了更新數據庫的模式。在這種情況下,我的模式沒有改變,只有一些數據...

回答

1

onUpgrade是正確的用於你所需要的。我在升級期間更新模式和靜態數據。我onUpgrade結構如下所示:

@Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
    { 
     if (oldVersion < 211) 
     { 
      // In this version we transfer Log data into new date keeping format - just milliseconds, no string formatting 
      db.execSQL("DROP TABLE IF EXISTS " + LogData.TABLE_NAME); 
      db.execSQL(LogData.TABLE_CREATE_SQL); 
      logInformation(db, "Application upgraded to 2.1.1 level and existing log data cleared from device."); 
     } 

     if (oldVersion < 212) 
     { 
     } 

     if (oldVersion < 220) 
     { 
      db.execSQL("DROP TABLE IF EXISTS " + MailData.MAIL_TABLE_NAME); 
     } 
    } 
2

讓我們從頭開始。當你與構造打開數據庫SQLiteOpenHelper它會得到你的版本信息。

如果數據庫不存在,它調用onCreate方法。 如果現有數據庫的版本低於您的版本,它會調用onUpgrade方法。

有關更多信息,請閱讀android documentation

所以,你可以在onCreate方法中插入你的初始信息。你可以在onUpgrade方法中改變你的表格或者在你的表格中插入一些額外的信息。

希望它有幫助..