c++ - SQLite 总是回复 "database table is locked"

标签 c++ c sqlite

如果我在我的 C++ 程序中执行这些语句(%s 代表一个选择语句,它可能会有所不同,请假设 %s 中没有错误)。

BEGIN TRANSACTION;
CREATE TEMP TABLE tmp AS %s;
DROP TABLE tmp;
COMMIT;

然后 sqlite3 总是回复 database table is locked,除非我最后没有删除表。这些语句使用 sqlite3_exec() 执行。网上还有其他类似的问题,但没有答案,例如:

http://sqlite.1065341.n5.nabble.com/How-is-the-table-getting-locked-and-how-to-unlock-it-td58324.html

我怀疑 PRAGMA journal_mode=WAL;PRAGMA synchronous=OFF; 是罪魁祸首,但我不确定。另外,也许一个一个地执行和完成语句也可能有效?我可以检查表当前是否已锁定吗?

最佳答案

您正在使用 sqlite3_enable_shared_cache()SQLITE_OPEN_SHAREDCACHE。 – CL。

关于c++ - SQLite 总是回复 "database table is locked",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27512393/

相关文章:

C - 获取数组中两个最接近的 int 数字

无法计算调用函数的正确次数

c++ - 使用 moveToThread 时是否需要锁定

c++ - 自动初始化列表的类型

c - 为什么我们像这样在微 Controller 编程中寻址寄存器

ruby-on-rails - Rails 3 SQLite3 bool 值 false

sqlite - 你如何在 Flutter 中访问 OneSignal 在 Android 和 iOS 上的数据库?

c++ - A() = A() - 为什么编译?

c++ - 在 C++ 中使用作为模板传递的类型

sql - 跨数据库字段的条件检查