【发布时间】:2023-03-27 09:52:03
【问题描述】:
我有一个场景,我的 Java 程序必须不断地与数据库表进行通信,例如,当我的 Java 程序在运行时向它添加新行时,它必须获取我的表的数据。我的程序和数据库之间应该有持续的通信。
如果表最初有 10 行,并且用户添加了 2 行,它必须检测到这一点并返回这些行。
【问题讨论】:
-
问题是..?你必须显示一些代码
我有一个场景,我的 Java 程序必须不断地与数据库表进行通信,例如,当我的 Java 程序在运行时向它添加新行时,它必须获取我的表的数据。我的程序和数据库之间应该有持续的通信。
如果表最初有 10 行,并且用户添加了 2 行,它必须检测到这一点并返回这些行。
【问题讨论】:
使用 HSQLDB,无需连续轮询即可支持。
HSQLDB TRIGGER 支持由触发器事件发送的同步或异步通知。目标可能是用户的应用或任何其他应用。
【讨论】:
对于 HSQL,您可以使用触发器。参考:http://hsqldb.org/doc/2.0/guide/triggers-chapt.html
Java 中的触发器操作
可以将触发器操作编写为实现 org.hsqldb.Trigger 接口的 Java 类。这个接口有一个方法,当触发器被激活时调用,无论是在事件之前还是之后。当引擎调用该方法时,它将触发器的类型提供为接口定义的 int 值(作为类型参数)、触发器的名称(作为 trigName 参数)、表的名称(作为 tabName 参数) ,OLD ROW(作为 oldRow 参数)和 NEW ROW(作为 newRow 参数)。 oldRow 参数对于行级 INSERT 触发器为空。对于行级 DELETE 触发器,newRow 参数为空。对于表级触发器,两个参数均为空(即,无法访问数据)。 triggerType 参数是 org.hsqldb.Trigger 接口中的常量之一,指示触发器的类型,例如 INSERT_BEFORE_ROW 或 UPDATE_AFTER_ROW。
CREATE TRIGGER t BEFORE UPDATE ON customer
REFERENCING NEW AS newrow FOR EACH ROW
BEGIN ATOMIC
IF LENGTH(newrow.firstname) > 10 THEN
CALL my_java_function(newrow.firstname, newrow.lastname);
END IF;
END
【讨论】:
持续沟通是什么意思?建立后,与数据库的连接应保持打开状态,直到您完成此处的任务。但是您必须不断轮询以获取新记录。
【讨论】:
这是不可能的。您必须定期轮询数据库以检测更改。
【讨论】: