2013-04-29 100 views
1

我實現了一個使用Sqlite數據庫的Android應用程序。在升級應用程序中刪除SQLite數據庫

當我發佈我的應用程序的新版本(不在playStore中)時,我將其上傳到我的服務器上,因此,如果舊應用程序正在運行,調用Web服務,可以理解新版本可用。所以,下載並安裝新版本。

當應用程序被覆蓋安裝,數據庫沒有下降,所以,如果我需要做我的數據庫中的任何改變,我需要使用方法:

public void onUpgrade(SQLiteDatabase _db, int oldVersion, int newVersion) 

這是正常的,除非我需要做的我的數據庫有很多變化。在這種情況下,代碼變得不可讀。所以我想刪除數據庫並創建一個新的數據庫。

我該如何執行此任務?

編輯:怎麼樣使用context.deleteDatabase(DATABASE_NAME);

+0

您是否嘗試刪除數據庫文件?你可以通過'_db.getPath()'得到路徑。 – 2013-04-29 14:53:42

回答

7

對於扔掉的數據庫(數據是如在雲中可用數據的高速緩存副本)我一般都onUpgrade()就叫onCreate()onCreate()執行DROP TABLE IF EXISTS <tablename>在創建表之前。

例如:

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

@Override 
public void onCreate(SQLiteDatabase db) { 
    db.execSQL("DROP TABLE IF EXISTS foo"); 
    db.execSQL("CREATE TABLE foo(bar INTEGER, baz TEXT"); 
} 
+0

但是我的表格尚未創建,我希望在重新創建新表格之前將其刪除。 – GVillani82 2013-04-29 15:14:43

+0

這正是「DROP TABLE IF EXISTS」所做的。如果它存在,它將刪除表,如果不存在,則不執行任何操作。編輯添加一個例子。 – laalto 2013-04-29 15:18:29

+0

onCreate()上的第二個execSQL方法中缺少右括號 – 2015-05-08 19:14:27

1

你可以想想這個

不斷升級的一絲共享偏好使用的標誌。當您下載新版本時,請將標誌設置爲true。在每次發射時檢查標誌。如果該標誌爲true,則重新創建數據庫並將該標誌設置爲false。

我沒有嘗試類似的東西,但我認爲它應該適用於你的情況。

,並刪除數據庫context.deleteDatabase(DATABASE_NAME);

+1

謝謝@Stine,但是當我談到「刪除數據庫」時,我的意思是drop數據庫。我怎樣才能刪除數據庫? – GVillani82 2013-04-29 14:52:07

0

如果你只是想重新創建你的整個數據庫,只是下降每個表中舊的。

+1

什麼是新的數據庫版本? – GVillani82 2013-04-29 15:13:58

相關問題