Android - SQLiteOpenHelper , 版本號未更新問題

摘要: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裡面也有,導致新的錯誤~~抱歉,此文章不太能幫助讀者解決問題(請勿模仿)