c++ - DLL使用sqlite3从不同进程写入同一个数据库文件

标签 c++ dll sqlite

我目前正在编写一个使用 sqlite3 与 Windows 系统上的数据库对话的 .dll。

现在,它非常简单,我刚刚编写了一个测试程序,可以从数据库中插入和选择。

然而,这个问题是我的 dll 将被同一系统上的多个程序使用,每个程序都写入同一个数据库文件。这当然会带来互斥问题。

在我继续为它编写一个复杂的连接池之前,我想知道 sqlite3 库支持它的程度。根据 doco 的说法,有诸如“共享缓存”和“无互斥”模式之类的东西,这些模式由提供给 sqlite3_open_v2 函数的参数指定:http://www.sqlite.org/c3ref/open.html

我也四处寻找一些 sqlite3 包装器,但找不到适合我的多访问需求的东西。

有没有人有从使用相同 .dll 的多个进程写入 sqlite3 db 文件的经验?或者有没有人幸运地使用了他们的 SHARED_CACHES - 我似乎遇到了各种各样的问题。

任何帮助都将非常有用,谢谢!

~丹

最佳答案

只要您通过 SQLite3 访问同一个数据库文件,就应该没问题。事实上,SQLite3 是专门为处理访问同一个数据库文件的多个进程而设计的。

作为一种规范,SQL 已经处理了多重访问,并且它提供了对原子访问等(事务之类的东西)的控制。只要您正确使用这些控件,您就应该保持警惕。

SQLite3 存在问题的是多个线程

关于c++ - DLL使用sqlite3从不同进程写入同一个数据库文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12033145/

相关文章:

C++ 策略对象和构建器模式

objective-c - 查询内存不足的sqlite错误xcode

google-app-engine - 如何导入谷歌应用引擎sqlite数据文件?

c++ - 为什么 C++ 用零初始化 std::vector 而不是 std::array?

c++ - WriteFileGather - 将缓冲区附加到文件

c++ - Windows 中 SO_RCVBUF 的最大值?

c++ - 用C/C++写库时#include (""or <>)是哪种类型

c# - 在c#中创建dll文件

c++ - 从 C# 使用 C++ DLL 时出现 AccessViolationException

mysql - 用专业数据库替换核心数据以提高性能