Multithreading 在多个qt线程中使用单个QSqlDatabase连接

Multithreading 在多个qt线程中使用单个QSqlDatabase连接,multithreading,qt,sqlite,qtsql,Multithreading,Qt,Sqlite,Qtsql,我有一个多线程Qt应用程序,它有多个线程访问单个数据库。是否需要创建单独的QSqlDatabase连接,以便在每个线程中执行SELECT/INSERT/UPDATE 从Qt文档中,我无法理解以下指南是否阻碍了我建议的上述方法: “只能从创建连接的线程中使用连接。 在线程之间移动连接或从 不支持不同的线程。“ 我已经尝试在我的多个qthread中使用相同的连接,所有的连接都可以正常工作,但是我想知道这样做是否正确 仅供参考,我正在使用Qt中的sqlite3(使用qtsqlapi),据我所知,Qt支

我有一个多线程Qt应用程序,它有多个线程访问单个数据库。是否需要创建单独的QSqlDatabase连接,以便在每个线程中执行SELECT/INSERT/UPDATE

从Qt文档中,我无法理解以下指南是否阻碍了我建议的上述方法:

“只能从创建连接的线程中使用连接。 在线程之间移动连接或从 不支持不同的线程。“

我已经尝试在我的多个qthread中使用相同的连接,所有的连接都可以正常工作,但是我想知道这样做是否正确

仅供参考,我正在使用Qt中的sqlite3(使用qtsqlapi),据我所知,Qt支持序列化模式 默认值:

我希望在多个线程中使用相同的连接名的原因是,当我尝试在多个线程上使用同一数据库的不同连接并执行SELECT/INSERT/UPDATE时,我经常遇到数据库锁定问题。然而,在多个线程中使用相同的连接时,这个问题完全消除了

敬请指导

问候,


索拉布·甘地(Saurabh Gandhi)

文件不仅仅是在劝阻它,它还断然声明你不能这样做(我的重点):

只能从创建连接的线程中使用连接

因此,不,您不能使用来自多个线程的一个连接。它可能会正常工作,但不能保证正常工作,您正在调用相当于未定义行为的内容。提醒你,它也不一定会崩溃

您需要:

  • 序列化您端对数据库的访问,或

  • 更改连接参数,使锁不会拒绝查询,而是阻塞,直到数据库可用。我不太确定数据库锁定的问题是什么:如果您实际使用多个连接,您永远不会看到错误代码(我假定它是SQLITE_锁定的)。Sqlite 3可以很容易地从多个线程使用,除了启用多线程和使用单独的连接之外,不需要任何其他工作


  • 也许可以创建一个包装类,它有一些插槽要插入/更新/删除,并将其放在自己的线程中