摘要:Android - SQLiteOpenHelper , 版本號未更新問題
這篇文章,教如何使用SQLiteOpenHelper 及 如果做資料庫版本更新(onUpgrade)
http://guoh.org/lifelog/2011/04/how-to-use-sqliteopenhelper/
int version = db.getVersion();
if (version != mNewVersion) {
db.beginTransaction();
try {
if (version == 0 ) {
onCreate(db);
} else {
onUpgrade(db, version, mNewVersion);
}
db.setVersion(mNewVersion);
db.setTransactionSuccessful();
} finally {
db.endTransaction();
}
}
而問題會在我做onUpgrade時有錯誤訊息,並且一直版本沒更新到。
從那篇文章會知道
在 SQLiteOpenHelper .getWritableDatabase 會執行資料庫版本號變更
後來發現,只要我版本之間執行有失敗如下
if(newVersion > oldVersion) {
switch(oldVersion) {
case xxx:
try {
db.beginTransaction();
db.execSQL(sql);
db.setTransactionSuccessful();
} catch(Exception e) {
e.printStackTrace();
} finally {
db.endTransaction();
}
}
}
若發生錯誤,移到catch裡沒有執行到setTransactionSuccessful,
導致就不會去更新資料庫的版本,而導致,每次都會去執行這一段的資料庫版本更新處理。
我就只好在finally加入setTransactionSuccessful處理。
這有點非正規做法,因為只增加一個欄位,在asset/db,已經有該欄位,add欄位失敗才出錯,這個不造成大問題,我就乎略。讓他過。
後記:最後因為在finally 放入了setTransactionSuccessful,及try裡面也有,導致新的錯誤~~抱歉,此文章不太能幫助讀者解決問題(請勿模仿)