2013-09-27 68 views
0

我創建了DatabaseHelper以使我的開發更容易。如果我的數據庫版本從1升級到2,onUpgrade將被調用,並且表將被刪除。我不知道這會導致我的數據存儲在表中嗎?我的意思是,我會丟失存儲在表中的數據嗎?當onUpgrade被調用時數據會丟失

這是代碼。

private static class DatabaseHelper extends SQLiteOpenHelper { 

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

    @Override 
    public void onCreate(SQLiteDatabase db) { 

     db.execSQL(DATABASE_CREATE); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     Log.w(TAG, "Upgrading database from version " + oldVersion + " to " 
       + newVersion + ", which will destroy all old data"); 
     db.execSQL("DROP TABLE IF EXISTS notes"); 
     onCreate(db); 
    } 
} 

回答

2

通過看你的代碼,是的,你將失去數據庫和一個新的空表notes將被創建的當前表。

所以升級數據庫最好的辦法是在此之前:

db.execSQL("DROP TABLE IF EXISTS notes"); 

聲明,你應該做你的當前數據庫的備份(最簡單的方法是重命名錶),然後刪除當前表來創建新的。

在編輯/升級信息之前保留信息的備份總是一種很好的編程習慣。

2

當你刪除一個表時,它的所有數據也被刪除。如果你想保留它,首先重命名錶格,創建一個新表格,然後選擇舊數據到新數據。

+0

好想法重新命名錶。我會試一試。 – edisonthk

0

如果顏色有變化,您可以在onUpgrade方法中更改表格。如果你想創建新表,那麼只需在onUpgrade中調用Drop,如果Schema中沒有改變,不要在onUpgrade方法內執行任何操作。