的Android onUpgrade数据库在我dbHelper
导致IllegalStateException异常
:的Android onUpgrade数据库在我<code>dbHelper</code>导致IllegalStateException异常
onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
功能我一个表保存到外部数据库。
所以我
- 重视并复制到外部数据库
- 删除此功能的数据库文件,并从外部
- 复制它从外部数据库恢复到数据库。
这个作品,直到函数返回到getWritableDatabase()
在这里,我得到这个异常:
java.lang.IllegalStateException: no transaction pending
有什么不对?由于 塔塔
问题是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();
}
}
...
我做一些SQL附着其不能在事务内完成。因此我db.endTransaction();这是问题所在。现在我调用db.beginTransaction();在onUpgrade结束时。谢谢 – user1324936
很高兴你的应用程序能够正常工作! :) –
我猜你可能叫onUpgrade
SQLiteDatabase.endTransaction()
而无需先调用SQLiteDatabase.beginTransaction()
。虽然看不到任何代码有点难以说明);
请张贴相关的代码和logcat的 –