我正在编写一个应用程序,该应用程序从 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,您的问题会更容易解决。
关于java - 使用 MySQL 触发器调用 Java 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48069941/