首页 > 解决方案 > 在每个 DELETE 之后执行 SQL 语句

问题描述

有没有办法让 jOOQCHECKPOINT在每个之后执行一个 SQL 语句(在我的情况下是 a )DELETE

理想情况下,还有一种方法可以指定发生这种情况的表。

我正在使用的 RDBMS (HSQLDB) 不允许在触发器中使用此语句,否则我会这样做。

标签: javasqlhsqldbjooq

解决方案


有没有办法让 jOOQ 在每次 DELETE 之后执行 SQL 语句(在我的情况下是 CHECKPOINT)?

最简单的方法是使用ExecuteListenerwhich 检查当前语句是否为DELETE语句。你可以这样做:

  • 如果您还有不是使用 jOOQ DSL 生成的普通 SQL 语句,则在生成的 SQL 上使用正则表达式
  • 或者,如果您确定您只在运行 jOOQ DSL 语句,请使用instanceof Delete检查。ExecuteContext.query()

这是为了检测这样一个语句的执行。当然,您的后续声明可以以不同的方式运行。

理想情况下,还有一种方法可以指定发生这种情况的表。

这有点棘手。您可以实现自己的VisitListener查找特定表上的所有删除语句。

这仅在您使用 DSL API 时才有效,除非您愿意在基于普通 SQL 语句解析VisitListener的 jOOQ 查询上运行,在这种情况下,您也可以对任意其他语句执行此操作。假设解析器可以解析您的 SQL。


推荐阅读