2010-12-20 46 views
1

我正在使用Qt連接到MySQL數據庫(通過QSqlTableModel/QSqlDatabase/etc),雖然這個問題更一般。通過Qt/QSqlTableModel輪詢MySQL數據庫(C++)

獲得「實時更新數據庫表視圖」的最佳方式是什麼?一種選擇是不斷地輪詢整個表(重複調用QSqlTableModel中的select()方法)。 雖然這似乎效率低下(每次都是從MySQL傳遞到Qt的整個表)

另一個選擇是將另一個表作爲日誌表(記錄所有更新/更改),然後你可以輪詢這個日誌表(只檢查新的條目......哪個更有效?)。然而,那麼你會失去很多內置的QSql功能)。

或者我應該有一個計數器變量,我輪詢,然後如果增加,我知道刷新整個表?

所有這些方法似乎有點混亂..你會推薦什麼?謝謝。

回答

0

這真是一個MySQL問題,但我有答案! :)

你想要的是實際上每隔X秒輪詢數據庫。然而,如果你創建一個MySQL「觸發器」,那麼如果插入,更新和/或刪除一行,它將創建一個指示器,這會使這種效率更高。

我想你應該創建一個觸發器,將修改後的行插入到第二個表中。從你的Qt的程序投票表決應該做這些動作:

  • 鎖定第二「修改」表
  • 閱讀的第二個「修改」表
  • 刪除的第二個「修改」的全部內容全部內容表
  • 解鎖第二「修改」表

如果你不鎖,你可能會不小心刪除已插入閱讀和刪除之間的新行的表。但是,如果您希望/需要避免鎖定,只需讀取所有內容,然後根據每行插入「修改」表中生成的唯一標識刪除檢索到的行。

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