【问题标题】:Listening to the changes made in MySQL database and updating front end automatically without explicitly refreshing the front end监听 MySQL 数据库中所做的更改并自动更新前端,而无需显式刷新前端
【发布时间】:2015-05-15 12:36:17
【问题描述】:

我正在研究标记表生成系统。 D系统将安装在多台计算机上,并在单独的专用计算机上具有集中的数据库服务器。

我需要的是,如果用户#1 正在从 PC1 插入数据,则更新的记录应反映在安装在 PC2 上的 d 系统上的 d JavaFX TableView 上。其他方式也应该如此。 但是我应该如何实现呢?

我觉得设置计时器并触发 SQL 查询不是一个好选择。

我正在使用 Hibernate 和 JavaFx 进行演示。我已经在JavaFXTableView 上列出了 MySQL 数据库记录,TableView 不会自行更新,除非我触发 Select 查询。

但是我需要找到一种方法是我的系统,或者特别是 TableView 应该监听或观察数据库中的 d 更改,并且如果数据库表中的 d 条记录由同一系统或其他 d 条更新,它应该自动更新自身系统安装在不同的机器上。

【问题讨论】:

标签: java mysql hibernate javafx


【解决方案1】:

您可以使用open replicator library。您必须配置您的 MySQL 以允许对指定的 DB 进行复制,并使用该库编写 java 代码来监听数据库更改。

这是一种调用java代码的触发器。

final OpenReplicator or = new OpenReplicator();
or.setUser("root");
or.setPassword("123456");
or.setHost("localhost");
or.setPort(3306);
or.setServerId(6789);
or.setBinlogPosition(4);
or.setBinlogFileName("mysql_bin.000001");
or.setBinlogEventListener(new BinlogEventListener() {
    public void onEvents(BinlogEventV4 event) {
        // your code goes here
    }
});
or.start();

因此您捕获插入/更新/删除。检查哪个表被更改并反映模型中的更改。

【讨论】:

  • 另一个选项是mysql-binlog-connector-java(我是其中的作者)。
  • @StanleyShyiko 听起来很棒。谢谢告知
  • 我收到“com.google.code.or.net.TransportException:二进制日志未打开”异常。请问有什么想法吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-20
  • 1970-01-01
  • 1970-01-01
  • 2015-05-02
  • 1970-01-01
相关资源
最近更新 更多