我有一个多线程C ++应用程序,它使用Sqlite3作为数据库。我存储SQLite数据库连接和需要访问数据库的线程,使用相同的连接创建自己的事务。
我使用以下命令获取数据库连接。
const int errorCode = sqlite3_open_v2(fileNameUtf8.c_str(), &Handle, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE | SQLITE_OPEN_FULLMUTEX, Vfs->GetName().c_str());
但是当多个线程正在访问数据库时,我面临着在同一连接中启动多个事务的问题。当第二个线程尝试开始事务错误消息"无法在事务中启动事务"退回。
我认为SQLITE_OPEN_FULLMUTEX标志允许使用相同连接的多个线程的情况。我假设它甚至可能允许同一连接中的多个事务。
Sqlite3中是否有任何选项可以使用相同的SQLite数据库连接开始与不同线程对应的多个事务?
提前致谢。
答案 0 :(得分:1)
同一个连接中的多个独立转换根本没有意义:因为您使用相同的连接,所以每个其他事务被数据库视为已存在的嵌套,因此错误。
但是如果你需要并发,你应该想知道SQLite是否是正确的工具。来自常见问题Appropriate Uses For SQLite :
SQLite不会与客户端/服务器数据库竞争。 SQLite与fopen()竞争。
以后
许多并发作家? →选择客户端/服务器
答案 1 :(得分:0)