java - 使用 MySQL 触发器调用 Java 方法

标签 java mysql methods database-trigger

我正在编写一个应用程序,该应用程序从 MySQL 数据库的表中检索数据并将其显示在 JTable 中。每当进行插入/更新/删除操作时,我希望显示更改。截至目前,我正在使用一个线程重复检查 information_schema 中表“tables”的属性“UPDATE_TIME”,其中“TABLE_SCHEMA”是我的架构名称,“TABLE_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()方法。有没有办法完成此任务或不涉及轮询的解决方案?

最佳答案

MySQL 协议(protocol)(当前形式 - 不确定 X 的变化)没有规定服务器向客户端发起数据传输。它纯粹是客户端发出请求 - 服务器回复类型,因此客户端检测更改的唯一选择是通过轮询。

您可以创建一个专用的“事件”表,该表将通过触发器进行更新,并时不时地从专用线程或其他方式轮询它。

奇怪的是,Postgresql 确实有一个客户端通知机制,以 LISTEN/NOTIFY 命令对的形式实现。因此,如果您可以切换到 Postgres,您的问题会更容易解决。

https://bugs.mysql.com/bug.php?id=19597 :-)

关于java - 使用 MySQL 触发器调用 Java 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48069941/

相关文章:

mysql - "Ignoring query to other database"命令行

mysql - 重命名锁定的表

C# 继承和方法

java - 在 Java Config 中 Autowiring Spring Authentication Manager

java - 初始化类

java - 有没有办法修改封闭类引用?

java - 带有 TextArea 的新 JFrame

php - MySQL concat函数获取超链接

Python - 如何查询定义方法的类?

javascript - 无法调用 Javascript 对象方法