【问题标题】:jOOQ add to current value on updatejOOQ 在更新时添加到当前值
【发布时间】:2019-07-01 21:35:05
【问题描述】:

我有一列对发生的事件进行了统计。我想通过 jOOQ 更新执行与以下 SQL 语句等效的操作:

更新 event_table 设置 event_count = event_count + 3;

3 是 artibrary,它将是一个 int,代表在我的 Java 程序中检测到的当前计数。

有没有办法做到这一点,而不是在一个 jOOQ 选择中选择值然后在另一个 jOOQ 更新中求和,从而导致两个数据库交互?

【问题讨论】:

  • 实际上,有一个 where 语句,其中有几列,我想同时更新其他几列。为简单起见,我将其关闭。总体而言,通过 jOOQ 比必须以编程方式将更新语句构造为字符串更方便和可读。

标签: java postgresql jooq


【解决方案1】:

每个 SQL 语句都可以直接转换为 jOOQ 语句。在 jOOQ 中使用 UPDATE 语句支持。 https://www.jooq.org/doc/latest/manual/sql-building/sql-statements/update-statement

具体来说:

DSLContext ctx = ...

ctx.update(EVENT_TABLE)
   .set(EVENT_COUNT, EVENT_COUNT.plus(3))
   .execute();

作为一般经验法则:

  • 所有函数(例如fn(a, b))都可以从DSL 类作为DSL.fn(a, b) 获得
  • 所有中缀运算符(例如a op b)都可以从Field 类型中获得,如a.op(b)

【讨论】:

  • 谢谢。我确实看到了该页面,但是如果您在该函数的第二个参数上提供该列,则完全错过了该列上可用的函数。
  • 另外,对 jOOQ 非常满意。在转到 Java 商店后的去年,我在这方面取得了很大的成功。
  • 谢谢你的好话,埃文。是的,所有中缀表达式基本上都可以在Field 类型上直接访问。我会把它添加到答案中
猜你喜欢
  • 2021-06-18
  • 2021-11-26
  • 1970-01-01
  • 2014-10-14
  • 2015-02-09
  • 2021-02-09
  • 2020-05-10
  • 1970-01-01
  • 2023-03-26
相关资源
最近更新 更多