1

在我的dbHelper

onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 

功能我将一张表保存到外部数据库。

因此我

  1. 附加并复制到外部数据库
  2. 删除此函数中的 db 文件并从外部复制
  3. 从外部数据库恢复到数据库。

这一直有效,直到函数返回 getWritableDatabase()

在这里,我得到了这个例外:

java.lang.IllegalStateException: no transaction pending

怎么了?谢谢塔塔

4

2 回答 2

3

问题是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();
            }
        }
        ...
于 2012-11-20T22:01:06.150 回答
2

我猜你可能没有先打电话就打SQLiteDatabase.endTransaction()进来了。虽然没有看到任何代码有点难以分辨;)onUpgradeSQLiteDatabase.beginTransaction()

于 2012-11-20T21:55:44.680 回答