0

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

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

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

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

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

4

1 回答 1

2

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

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

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

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

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

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

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

于 2013-09-04T19:02:35.197 回答