gpt4 book ai didi

c++ - 通过Qt/QSqlTableModel (C++)轮询MySQL数据库

转载 作者:太空宇宙 更新时间:2023-11-04 14:25:12 24 4
gpt4 key购买 nike

我正在使用 Qt 连接到 MySQL 数据库(通过 QSqlTableModel/QSqlDatabase 等),尽管这个问题更笼统。

获得“实时更新数据库 TableView ”的最佳方法是什么?一种选择是不断轮询整个表(重复调用 QSqlTableModel 中的 select() 方法)。不过这看起来效率不高(每次都是从 MySQL 向 Qt 传递整个表吗?)

另一种选择是有另一个表,它充当日志表(跟踪所有更新/更改),然后您可以轮询此日志表(仅检查新条目..这似乎更有效?) .然而,你会失去很多 QSql 的内置功能。<​​/p>

或者我应该有一个我轮询的计数器变量,然后如果它增加,我知道刷新整个表吗?

所有这些方法似乎都有些困惑。您会推荐什么?谢谢。

最佳答案

这确实是一个 MySQL 问题,但我有答案! :)

实际上,您想要的是每 X 秒轮询一次数据库。但是,如果您创建一个 MySQL“触发器”,那么如果插入、更新和/或删除一行,它将创建一个指示器,这将使它变得高效。

我认为您应该创建一个触发器,将修改后的行插入到第二个表中。来自 Qt 程序的轮询应该执行以下操作:

  • 锁定第二个“修改”表
  • 阅读第二个“修改”表的全部内容
  • 删除第二个“modifications”表的所有内容
  • 解锁第二个“修改”表

如果不锁定表,您可能会意外删除在读取和删除之间插入的新行。但是,如果您想要/需要避免锁定,只需读取所有内容,然后根据插入到“修改”表中的每一行生成的唯一 ID 删除您检索到的行。

MySQL 触发器的常见问题解答和文档位于此处:http://dev.mysql.com/doc/refman/5.0/en/faqs-triggers.html

锁定/解锁表的文档在这里:http://dev.mysql.com/doc/refman/5.0/en/lock-tables.html

关于c++ - 通过Qt/QSqlTableModel (C++)轮询MySQL数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4493654/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com