每次 DELETE 后执行 SQL 语句

Perform SQL statement after each DELETE

有没有办法让 jOOQ 在每个 DELETE 之后执行一个 SQL 语句(在我的例子中是 CHECKPOINT)?

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

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

Is there a way to make jOOQ perform a SQL statement (in my case a CHECKPOINT) after each DELETE?

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

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

这是为了检测这样一条语句的执行。当然,您的跟进声明可以 运行 以不同的方式呈现。

Ideally there would also be a way to specify the tables that this happens for.

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

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

您应该能够使用 Execute 语句从 jOOQ 中执行 "checkpoint",例如:

//create connection

String sql = "use [MyDatabase] checkpoint ";
connection.createStatement().executeQuery(sql);

话虽如此,为什么 运行 每条删除记录后都有一个检查点?如果您担心数据被写入光盘,只需 运行 "checkpoint" 遍历所有删除操作即可。