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

时间:2010-12-20 20:31:47

标签: c++ sql mysql qt polling

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

获得“实时更新数据库表视图”的最佳方法是什么?一种选择是不断轮询整个表(在QSqlTableModel中重复调用select()方法)。 这似乎效率低下(每次从MySQL传递到Qt的整个表?)

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

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

所有这些方法看起来有点混乱......你会推荐什么?感谢。

1 个答案:

答案 0 :(得分:0)

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

你想要的是每隔X秒轮询数据库。但是,如果你使MySQL成为“触发器”,那么如果插入,更新和/或删除行,它将创建一个指示符。

我认为您应该创建一个触发器,将修改后的行插入第二个表中。来自Qt程序的民意调查应该采取以下行动:

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

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

MySQL触发器的FAQ和文档位于:http://dev.mysql.com/doc/refman/5.0/en/faqs-triggers.html

锁定/解锁表格的文档位于:http://dev.mysql.com/doc/refman/5.0/en/lock-tables.html