Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了android – SQLiteException:无法在事务中启动事务(代码1)大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我在完成一个sqlite事务时遇到了问题,我对如何做到这一点感到困惑.它从2007年开始看起来像 this bug.

我正在创建我的employee表(引用另一个表实体),如下所示(为简洁起见):

create table employee (_id integer NOT NULL,PRIMARY KEY ( _id ),FOREIGN KEY (_id) REFERENCES entity(_id)  ON deletE cascade ON updatE cascade DEFERRABLE INITIALLY DEFERRED )

然后我按如下方式运行事务(使用sqliteDatabase对象,我还报告日志中事务的状态):

>> In transaction: false
begintransaction();
>> In transaction: true
doSomeWronginsert();
settransactionsuccessful();
endtransaction();
>> In transaction: false
sqliteConsTraintexception: foreign key consTraint Failed (code 19)

好的,一切正常.现在,如果我尝试启动新事务或回滚,则两者都会失败:

>> In transaction: false
begintransaction();
android.database.sqlite.sqliteException: cAnnot start a transaction within a transaction (code 1)
>> In transaction: false
endtransaction();
java.lang.IllegalStateException: CAnnot perform this operation because there is no current transaction.

请注意,如果FK立即而不是延期,则所有这些都不会发生.

解决方法

这似乎是Android中的一个错误.
SQLiteSession class中,endtransactionUnchecked在执行COMMIT之前清除其事务状态(mtransactionStack),并且不期望数据库的事务可能仍处于活动状态.
(我认为没有延迟约束就不会发生这种情况.)

提交a bug report.

大佬总结

以上是大佬教程为你收集整理的android – SQLiteException:无法在事务中启动事务(代码1)全部内容,希望文章能够帮你解决android – SQLiteException:无法在事务中启动事务(代码1)所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。