2010-08-28 89 views
0

我有一個使用數據庫的應用程序。在啓動時,我檢查我的表是否丟失,如果有的話,我創建它們。很棒。 我注意到,如果我「adb卸載」,那麼下一次我運行我的應用程序時,表格會重新創建(這是我需要的),但通過市場更新時怎麼辦? 我正在發佈更新,並且對錶格進行了重大更改。如果表格被完全擦除並重新創建,我希望它,實際上我的應用程序需要這樣的事情發生。如果有人更新並擁有舊錶,那麼會有一個關閉的力量。 有誰知道這種情況的具體情況?Android數據庫是否完全刪除並重新創建,然後更新應用程序?

我的表格僅用於查找,我不存儲用戶數據,所以我不在乎丟失更新數據。 當然,我知道一個選擇是使用某種類型的「版本」表,並檢查是否需要手動刪除和創建,但我想知道是否需要這樣做。 謝謝。

回答

4

在更新時,表格被單獨保留。我假設你已經實現了一個SQLiteOpenHelper的子類來解釋這一點。 Android能夠處理版本更改的方式是在SQLiteOpenHelper類中使用onUpgrade。如果數據庫版本比應用程序預期的版本舊,則從SQLiteOpenHelper的構造函數調用此方法。從onUpgrade內部您將放棄舊桌子並創建新桌子。

onUpgrade (SQLiteDatabase db, int oldVersion, int newVersion){ 
Log.w(TAG, "Upgrading database from version " + oldVersion + " to " 
        + newVersion + ", which will destroy all old data"); 
      //we can change this to perform different behaviors 
      db.execSQL("DROP TABLE IF EXISTS "+MYDB.TABLE_NAME); 
      onCreate(db); 
} 

如果您使用的是新數據庫版本,請注意Android告訴您的方式,這一點非常重要。

DatabaseHelper(Context context) { 
      super(context, DATABASE_NAME, null, DATABASE_VERSION); 
     } 

那場DATABASE_VERSION使用,所以你應該使用一個靜態最終成員INT作爲您的數據庫實現的一部分。

希望有幫助,如果您有任何疑問,請留下評論。

相關問題