Android onUpgrade数据库导致IllegalStateException

时间:2012-11-20 21:48:03

标签: android

dbHelper

onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 

function我将一个表保存到外部数据库。

因此我

  1. 附加并复制到外部数据库
  2. 删除此函数中的db文件并从外部复制
  3. 从外部数据库恢复到db。
  4. 这一直有效,直到函数返回到getWritableDatabase()

    这里我得到了这个例外:

    java.lang.IllegalStateException: no transaction pending
    

    有什么问题?谢谢 塔塔

2 个答案:

答案 0 :(得分: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();
            }
        }
        ...

答案 1 :(得分:2)

我猜你可能在SQLiteDatabase.endTransaction()中调用onUpgrade而没有先调用SQLiteDatabase.beginTransaction()。虽然在没有看到任何代码的情况下有点难以辨别;)