的Android onUpgrade数据库在我dbHelper导致IllegalStateException异常

问题描述:

的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的 –

问题是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

很高兴你的应用程序能够正常工作! :) –

我猜你可能叫onUpgradeSQLiteDatabase.endTransaction()而无需先调用SQLiteDatabase.beginTransaction()。虽然看不到任何代码有点难以说明);