【问题标题】:Concurrency using Qt and SQLite databases使用 Qt 和 SQLite 数据库的并发性
【发布时间】:2013-09-04 18:50:48
【问题描述】:

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

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

另外,其他计算机是否可以监视与 DB 的连接(以便他们知道谁在编辑 DB)?

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

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

【问题讨论】:

    标签: c++ qt sqlite


    【解决方案1】:

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

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

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

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

    3. 通知程序QObject 在本地子网上广播发生了什么变化以及发生在哪里。这可以被网络上运行的所有应用程序获取。

    4. 如果您想变得非常非常聪明,可以在 sqlite 模型之上使用自定义代理模型来接收通知并发送相关信号。

    这整个事情可以非常非常简单,如果你是在寻找一个特定的案例,而不是一个通用的解决方案。听起来很复杂 :) 如果您想了解其他情况可能涉及的内容,请查看 here

    【讨论】:

      猜你喜欢
      • 2023-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-24
      相关资源
      最近更新 更多