在每个DELETE之后执行SQL语句

时间:2019-05-02 14:40:37

标签: java sql hsqldb jooq

是否有办法让jOOQ在每个{​​{1}}之后执行一条SQL语句(在我的情况下为CHECKPOINT)?

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

我正在使用的RDBMS(HSQLDB)不允许在触发器中使用此语句,否则我会以这种方式完成。

2 个答案:

答案 0 :(得分:2)

  

是否有办法让jOOQ在每个DELETE之后执行一条SQL语句(在我的情况下为CHECKPOINT)?

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

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

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

  

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

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

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

答案 1 :(得分:1)

您应该能够使用Execute语句从jOOQ内部执行“检查点”,例如:

//create connection

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

话虽如此,为什么要在每个删除的记录之后运行检查点?如果您担心将数据写入磁盘,只需运行“检查点”,即可遍历所有删除操作。