我正在開發一個Android應用程序。 我的應用程序包含一個本地數據庫,位於應用程序的/ assests文件夾中。 當用戶安裝應用程序時,它會複製數據庫以便使用它。然後用戶可以添加項目。更新應用程序-Android
我的問題是,如果我將爲我的應用程序發佈更新,它是否會清除數據(刪除複製的數據庫),從而擦除用戶對數據庫的更改(因爲應用程序會再次從資產文件夾中複製數據庫)?
我正在開發一個Android應用程序。 我的應用程序包含一個本地數據庫,位於應用程序的/ assests文件夾中。 當用戶安裝應用程序時,它會複製數據庫以便使用它。然後用戶可以添加項目。更新應用程序-Android
我的問題是,如果我將爲我的應用程序發佈更新,它是否會清除數據(刪除複製的數據庫),從而擦除用戶對數據庫的更改(因爲應用程序會再次從資產文件夾中複製數據庫)?
號如果用戶在更新應用程序(不卸載它 - 在這種情況下將被刪除)和數據庫則已經存在的Android不會刪除它(它可能包含重要的信息!)。
而是調用SQLiteOpenHelper的onUpgrade
方法,由您決定是要清除還是保留數據。
這完全取決於你如何複製它。你是否總是複製它而不檢查它是否已經存在?那麼是的,它可能會。儘管如此,你確實需要向我們展示一些代碼。
我確實檢查它是否已經存在。我的問題是如果更新應用程序刪除現有的數據庫。是否像卸載並重新安裝應用程序? – Tofira 2011-04-06 05:20:19
您應該覆蓋在SQLiteOpenHelper的onUpgrade方法:
/*
* (non-Javadoc)
*
* @see
* android.database.sqlite.SQLiteOpenHelper#onCreate(android.database.sqlite
* .SQLiteDatabase)
*/
@Override
public void onCreate(SQLiteDatabase db) {
// CREATE TABLE teas (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT
// NULL, brew_time INTEGER);
String sql = "CREATE TABLE " + TABLE_NAME + " (" + _ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + NAME + " TEXT NOT NULL, " + BREW_TIME + " INTEGER" + ");";
db.execSQL(sql);
}
/*
* (non-Javadoc)
*
* @see
* android.database.sqlite.SQLiteOpenHelper#onUpgrade(android.database.sqlite
* .SQLiteDatabase, int, int)
*/
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
onCreate(db);
}
好的謝謝,但我的問題是我如何完全保留數據?有沒有一種方法來測試它,而不實際升級? – Tofira 2011-04-06 13:57:12
當然,只需在SQLiteOpenHelper的'onUpgrade'方法中放置'Log'語句或執行'SELECT'即可。只要你不明確地改變數據庫,它就會保持原樣。 http://developer.android.com/reference/android/database/sqlite/SQLiteOpenHelper.html#onUpgrade(android.database.sqlite.SQLiteDatabase,int,int) – 2011-05-07 21:13:18