我正在開發針對android的測驗類型應用程序,並且旨在能夠隨着時間的推移擴展問題庫。要做到這一點,我是預包裝的SQLite數據庫,並檢查更新,並覆蓋它的升級:Android預打包數據庫更新
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
if(newVersion>oldVersion) {
InputStream inputStream = null;
OutputStream outStream = null;
String dbFilePath = DATABASE_PATH + DATABASE_NAME;
try {
inputStream = myContext.getAssets().open("questions.db");
outStream = new FileOutputStream(dbFilePath);
byte[] buffer = new byte[1024];
int length;
while ((length = inputStream.read(buffer))>0) {
outStream.write(buffer, 0, length);
}
outStream.flush();
outStream.close();
inputStream.close();
} catch(IOException e) {
throw new Error("problem copying database from resource file");
}
}
}
什麼我不能確定的是如何保存的問題是否已經嘗試(和預防即在升級時被覆蓋)。看來我的選擇是:
1)保存布爾共享偏好的每一個問題ID(可能sharedprefs的LOT)
2)創建一個單獨的數據庫來保存對哪些問題已經回答了數據(似乎像矯枉過正)
3)保持結果的數據在同一個數據庫的一個單獨的表,然後確保只有問表大幹快上升級
4重寫)保持用戶數據中的自己的列問題表,但防止該列被覆蓋。
以上,4看起來是最優雅的(雖然不知道如果可能)。什麼是最好的方式去做(如果它是選項3或4,我該如何去修改代碼?!)
非常感謝!
你能突出你的問題嗎? pleeeeeeeeeez –
上面的代碼會在每次升級應用程序時覆蓋整個數據庫。問題是,這也將覆蓋從應用程序中保存在該數據庫中的任何內容。我的問題是如何替換某些表或列,而不是擦拭整個事情。 – cg5572
你在找這個嗎? http://stackoverflow.com/questions/9109438/using-already-created-database-with-android/9109728#9109728 –