使用Qt和SQLite数据库的并发

时间:2013-09-04 18:50:49

标签: c++ qt sqlite

我正在开发一个非常简单的小应用程序,它将使用Qt / SQLite。有时,应用程序将从办公室周围的多台计算机访问共享的SQLite数据库。

有没有办法检测(通过事件?)何时从网络上的另一台计算机对数据库进行更新,以便程序可以知道刷新其信息?

此外,可以通过其他计算机监控与DB的连接(因此他们知道谁正在编辑数据库)?

理想情况下,我不想在数据库中为“协作”目的创建单独的表,并且不值得设置定时器和循环来监视活动;我只想知道是否有任何内置的东西可以用来确保每个连接的人都能以有效的方式“在同一页面上”。

作为最后的手段,监控SQLite数据库文件的最后修改时间的Qt信号是否是一种可靠的方法来跟踪是否有更新,或者Qt SQLite驱动程序是否倾向于触及SQL事务之外的数据库文件?

1 个答案:

答案 0 :(得分:2)

我同意如果这很容易就会很好,但事实并非如此。 SQLite不提供任何直接提供此类功能的机制。 sqlite3_update_hook系统仅监视必须在监视过程中的一个连接。

您可以做的是创建本地分布式通知系统。大致是:

  1. 创建一个调用自定义SQLite函数的sql触发器。

  2. 自定义SQLite函数将事件发布到某个通知程序QObject。这需要通过extern 'C' {...}存根来完成。

  3. 通知程序QObject在本地子网上广播已更改的内容和位置。这可以通过网络上运行的所有应用程序获取。

  4. 如果你真的非常聪明,你可以在sqlite模型之上拥有一个自定义代理模型,它接收通知并发送相关信号。

  5. 如果您处理特定情况,而不是一般解决方案,那么整个事情可以非常非常简单。这听起来很复杂:)如果你想查看可能涉及的内容,请查看here