使用mysql触发器调用java方法

qlzsbp2j  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(516)

我正在编写一个应用程序,从mysql数据库中的表中检索数据并将其显示在jtable中。无论何时进行插入/更新/删除操作,我都希望显示更改。到目前为止,我正在使用一个线程重复检查information\u schema中“tables”表中的属性“update\u time”,其中“table\u schema”是我的模式名,“table\u name”是我需要检查的表名,不过,我觉得这种方法是非常昂贵的资源,因为它每200毫秒启动一个查询。我知道这可能被问了很多次,但我能找到的要么是一个使用oracle的解决方案,要么是一些过时或不完整的东西,那么有没有办法在mysql中使用触发器调用java方法?我在想这样的事情:

void checkTableUpdate() {
    synchronized (tableUpdate) {
        try {
            tableUpdate.wait();
            /**
             * code executed to display the changes
             */
        } catch (InterruptedException e) {
            /**
             * 
             */
        }
    }
}

void notifyTableUpdate() {
    synchronized (tableUpdate) {
        tableUpdate.notify();
    }
}

触发器必须调用notifytableupdate()方法。有没有一种方法可以做到这一点或解决方案,不涉及投票?

wsxa1bj1

wsxa1bj11#

mysql协议(以其当前的形式-不确定x变体)没有为服务器提供启动到客户端的数据传输。这纯粹是客户机发出请求-服务器回复类型,因此客户机检测更改的唯一选择是轮询。
您可以创建一个专用的“events”表,该表将由触发器更新,并时不时地从专用线程或其他任何线程轮询它。
奇怪的是,postgresql确实有一个客户端通知机制实现为 LISTEN / NOTIFY 命令对。因此,如果你能转到博士后,你的问题将更容易解决。
https://bugs.mysql.com/bug.php?id=19597 :-)

相关问题