DLL使用sqlite3从不同的进程写入同一个数据库文件
DLL uses sqlite3 to write to same database file from different processes
我目前正在编写一个.dll,它使用sqlite3与windows系统上的数据库进行对话。
现在,它非常简单,我刚刚编写了一个测试程序,可以从数据库中进行插入和选择。
然而,这个问题是,我的dll将被同一系统上的多个程序使用,每个程序都写入同一个数据库文件。这当然会带来互斥问题
在我为sqlite3库编写一个复杂的连接池之前,我想知道它在多大程度上支持这一点。根据文档,sqlite3_open_v2
函数的参数指定了"共享缓存"answers"无互斥"模式:http://www.sqlite.org/c3ref/open.html
我还四处寻找了一些sqlite3包装器,但我找不到任何适合我多访问需求的包装器。
有人有从使用相同.dll的多个进程写入sqlite3db文件的经验吗?或者有人在使用他们的SHARED_CACHES
方面运气好吗?我似乎遇到了各种各样的问题。
在这件事上有任何帮助都会很好,谢谢!
~ Dan
只要您通过SQLite3访问同一个数据库文件,就应该没问题。实际上,SQLite3是专门为处理多个进程访问同一个DB文件而设计的。
SQL作为一种规范,已经处理了多次访问,它提供了对原子访问等(事务之类的)的控制。只要您正确地使用这些控件,您就应该是文件。
SQLite3遇到问题的是多个线程。
相关文章:
- 查询SQLite数据库中的日期
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 为什么std::async使用同一个线程运行函数
- 如何在ArangoDb AQL查询中指定数据库
- 从数据库实时显示QT c++中的数据
- 使用 pqxx 将 std::vector 存储在 postgresql 中,并从数据库中检索它
- 无法在C++中建立与MySQL数据库的连接
- 将类实现到数据库程序中
- 连接 dockerized 模型和 dockerized 数据库时出现"无法 SQLConnect"错误
- C++应用程序 MySQL odbc 数据库连接错误:在引发"otl_tmpl_exception<>"实例后终止调用
- 多个"常量引用"变量可以共享同一个内存吗?
- 调试编译的服务器在数据库打开时崩溃
- C++变量mysql_query到数据库
- LMDB:在有限的内存系统中打开大型数据库
- 如何在多个线程中创建 QSql数据库连接时防止名称冲突
- 以只读模式打开数据库时SQLITE_CANTOPEN错误
- 如何使用SQLite将数据库中的值导出为C / C++中的字符串或字符?
- 如何在Qt中从数据库中检索二进制数据?
- 如何从网站获取数据并将其传输到数据库?
- DLL使用sqlite3从不同的进程写入同一个数据库文件