2012-11-20 24 views
0

的Android onUpgrade數據庫在我<code>dbHelper</code>導致IllegalStateException異常

onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 

功能我一個表保存到外部數據庫。

所以我

  1. 重視並複製到外部數據庫
  2. 刪除此功能的數據庫文件,並從外部
  3. 複製它從外部數據庫恢復到數據庫。

這個作品,直到函數返回到getWritableDatabase()

在這裏,我得到這個異常:

java.lang.IllegalStateException: no transaction pending 

有什麼不對?由於 塔塔

+2

請張貼相關的代碼和logcat的 –

回答

2

問題是onUpgrade方法(以及onCreate)發生在一個事務中,並在最後設置事務成功並結束它。

但是,您已經結束了onUpgrade的交易,導致此錯誤。

SQLiteOpenHelper相關代碼:

 ... 
     if (version != mNewVersion) { 
      db.beginTransaction(); 
      try { 
       if (version == 0) { 
        onCreate(db); 
       } else { 
        onUpgrade(db, version, mNewVersion); 
       } 
       db.setVersion(mNewVersion); 
       db.setTransactionSuccessful(); 
      } finally { 
       db.endTransaction(); 
      } 
     } 
     ... 
+0

我做一些SQL附着其不能在事務內完成。因此我db.endTransaction();這是問題所在。現在我調用db.beginTransaction();在onUpgrade結束時。謝謝 – user1324936

+0

很高興你的應用程序能夠正常工作! :) –

1

我猜你可能叫onUpgradeSQLiteDatabase.endTransaction()而無需先調用SQLiteDatabase.beginTransaction()。雖然看不到任何代碼有點難以說明);

相關問題