关于sqlite数据库导入了一半时,遇到重复id停止了。所以 *** 作回滚,但剩下db-journal文件。怎么解决冲突哇

关于sqlite数据库导入了一半时,遇到重复id停止了。所以 *** 作回滚,但剩下db-journal文件。怎么解决冲突哇,第1张

要忽略冲突,你把id的主键给删掉。主键有单一性约束。

db-journal是日志文件,跟回滚不回滚没关系。

你不希望数据回滚?其实数据库在遇到冲突事件自动回滚的功能,是为了保护数据。这样的话,你可以回到你要导入的文件里面去,修改完善之后再导入。

其次,设主键最好是设与你的信息基本上没有关系的列作为键。对于主键的设置你可以参考网上的其他资料。

希望我的回答对你有所帮助。

该文件是sqlite的一个临时的日志文件,主要用于sqlite数据库的事务回滚 *** 作了。在事务开始时产生,在事务 *** 作完毕时自动删除,当程序发生崩溃或一些意外情况让程序非法结束时,此文件便保存在了磁盘上,以便下次运行时进行事务回滚。

而android自己的一些机制,又使*.db-journal一直存在。即第一次 *** 作数据库时,*.db-journal文件会被自动创建,且是永久的保存在磁盘中,不会被自动清除的,如果没有 *** 作异常或者不需要事务回滚时,此文件的大小为0。这种机制避免了每次生成和删除*.db-journal文件的开销

在SQLite中,如果没有为当前的SQL命令(SELECT除外)显示的指定事务,那么SQLite会自动为该 *** 作添加一个隐式的事务,以保证该 *** 作的原子性和一致性。当然,SQLite也支持显示的事务,其语法与大多数关系型数据库相比基本相同。见如下示例:

sqlite>BEGIN TRANSACTION

sqlite>INSERT INTO testtable VALUES(1)

sqlite>INSERT INTO testtable VALUES(2)

sqlite>COMMIT TRANSACTION --显示事务被提交,数据表中的数据也发生了变化。

sqlite>SELECT COUNT(*) FROM testtable

COUNT(*)

----------

2

sqlite>BEGIN TRANSACTION

sqlite>INSERT INTO testtable VALUES(1)

sqlite>ROLLBACK TRANSACTION --显示事务被回滚,数据表中的数据没有发生变化。

sqlite>SELECT COUNT(*) FROM testtable

COUNT(*)

----------

2


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10841538.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-11
下一篇 2023-05-11

发表评论

登录后才能评论

评论列表(0条)

保存