我正在编写一个从MySQL数据库的表中检索数据并在JTable中显示数据的应用程序。每当执行插入/更新/删除操作时,我都希望显示更改。到目前为止,我正在使用一个线程来重复检查information_schema中表"tables“中的属性"UPDATE_TIME”,其中"TABLE_SCHEMA“是我的模式的名称,"TABLE_NAME”是我需要检查的表的名称,但是我觉得这种方法非常耗费资源,因为它每隔200ms就会启动一次查询。我知道这个问题可能已经被问了很多次,但我所能找到的要么是使用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()方法。有没有一种方法可以做到这一点,或者不涉及轮询的解决方案?
发布于 2018-01-03 09:34:06
MySQL协议(以其当前的形式-不确定X的变化)没有规定服务器向客户端发起数据传输。它纯粹是客户端发出请求-服务器回复类型,所以客户端检测更改的唯一选择就是轮询。
您可以创建一个专用的"events“表,该表将由触发器更新,并时不时地从专用线程或其他地方轮询它。
奇怪的是,Postgresql确实有一个作为LISTEN/NOTIFY命令对实现的客户端通知机制。因此,如果您可以切换到Postgres,那么您的问题就会更容易解决。
https://stackoverflow.com/questions/48069941
复制相似问题