2008-12-18 22 views
7

我遇到了一个关于sqlite3的奇怪问题。我使用open()方法获得了同一数据库文件的不同连接。连接1开始一个事务,连接2开始另一个事务,即更新一个表的几个记录。然后连接1提交事务,然后连接2提交它的事务。但是我发现连接2的更新命令永远不会实际更新数据库中的记录。在这个过程中没有抛出异常。我不知道为什么会出现这个问题。任何人都可以向我解释原因吗?同一个sqlite数据库的不同连接可以同时开始事务吗?

回答

14

如果您阅读SQLite文档,您将看到它仅支持多连接读取,您不能从多个连接写入数据库,因为它不是为此设计的。

http://www.sqlite.org/faq.html#q5

+1

但是,您可以有两个并发写入事务,这是导致此问题的原因。 – 2008-12-18 01:34:00

5

除非你使用立即开始启动你的交易,你冒回滚和重试他们的风险。 BEGIN不会做任何锁定;随后的UPDATE或INSERT获取锁定,并且您需要检查结果代码以查看它们是否失败。请参阅transactions上的此页面和locks上的此页面。

相关问题