我正在编写一个应用程序,从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()方法。有没有一种方法可以做到这一点或解决方案,不涉及投票?
1条答案
按热度按时间wsxa1bj11#
mysql协议(以其当前的形式-不确定x变体)没有为服务器提供启动到客户端的数据传输。这纯粹是客户机发出请求-服务器回复类型,因此客户机检测更改的唯一选择是轮询。
您可以创建一个专用的“events”表,该表将由触发器更新,并时不时地从专用线程或其他任何线程轮询它。
奇怪的是,postgresql确实有一个客户端通知机制实现为
LISTEN
/NOTIFY
命令对。因此,如果你能转到博士后,你的问题将更容易解决。https://bugs.mysql.com/bug.php?id=19597 :-)