gpt4 book ai didi

c++ - sqlite 数据库保持锁定/不可访问

转载 作者:IT王子 更新时间:2023-10-29 00:46:00 25 4
gpt4 key购买 nike

我有一个 sqlite3 数据库的问题,它在特定访问后仍然锁定/无法访问。

到目前为止,行为发生在 Ubuntu 10.4 和自定义 (OpenEmbedded) Linux 上。sqlite 版本为 3.7.7.1)。 db是一个本地文件。

一个 C++ 应用程序定期访问数据库(5 秒)。每次完成多个插入语句时,都包含在延迟事务中。这只发生在一个线程中。与数据库的连接在应用程序的整个生命周期内保持。使用的语句也是持久的,并通过 sqlite3_reset 重用。 sqlite_threadsafe 设置为 1(序列化),日志记录设置为 WAL。

然后我使用 sqlite 命令行工具并行打开 sqlite 数据库。我输入 BEGIN IMMEDIATE;,等待 >5s,然后使用 END; 提交。

在此之后,应用程序的数据库访问失败:BEGIN TRANSACTION 返回返回代码 1(“SQL 错误或缺少数据库”)。如果我在开始之前执行 ROLLBACK TRANSACTION,只是为了确保还没有事件事务,它会失败并返回代码 5(“数据库文件已锁定”)。

有没有人知道如何解决这个问题或知道可能导致它的原因?

编辑: 有一个解决方法:如果发生上述错误,我关闭并重新打开数据库连接。这解决了问题,但我目前不知道为什么会这样。

最佳答案

Sqlite 是一个无服务器数据库。据我所知,它在设计上不支持来自多个源的并发访问。您正在尝试从您的应用程序和命令工具访问相同的支持文件 - 因此您尝试执行并发访问。这就是它失败的原因。

关于c++ - sqlite 数据库保持锁定/不可访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7765382/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com