我正试图了解一个通过JDBC与pgSQL数据库(服务器)通信的java(客户端)应用程序如何"捕获"查询产生的结果,该查询将在记录插入表时(使用触发器)触发。
因此,为了澄清,通过JDBC,我安装了一个触发器过程,准备在记录插入给定数据库表时执行查询,执行该查询将产生一个输出(我想是封装在resultSet中)。我的问题是,我不知道客户端将如何意识到这些异步生成的结果。
我想知道JDBC是否支持任何"回调"机制,能够捕获在"INSERT INTO表"条件下通过触发过程触发的查询所产生的结果。如果没有这样的"回调"机制,那么实现这一结果的最佳方法是什么?
提前感谢:)
触发器不能返回结果集。
没有办法将这样的结果发送到JDBC驱动程序。
有一些肮脏的黑客可以用来从触发器向客户端获取结果,但它们都是这样。比如:
-
DECLARE
为结果集指定一个游标,然后将游标名称作为NOTIFY
有效载荷发送,这样应用程序就可以FETCH ALL FROM <cursorname>
; -
创建
TEMPORARY
表并通过NOTIFY
报告名称
更常见的情况是,将触发器与应用程序通信所需的任何内容附加到为此目的而存在的表中,并在触发触发器的操作运行后从中获得应用程序SELECT
。
在大多数情况下,如果你需要这样做,你可能会使用一个常规函数更适合的触发器。