gpt4 book ai didi

java - JOOQ:更新空值的列值

转载 作者:行者123 更新时间:2023-11-30 02:02:38 25 4
gpt4 key购买 nike

我需要使用 Java 上的 JOOQ 更新与行关联的整数列的值。如果该列的值不为 NULL,我知道我可以使用以下代码:

context.update(TABLENAME)
.set(TABLENAME.COUNTER, TABLENAME.COUNTER.add(incrementValue))
.where(TABLENAME.ID.eq(id))
.execute();

但是,如果列值具有 NULL 值,我想知道是否可以通过在存在 NULL 的情况下设置默认值来执行类似以下操作:

context.update(TABLENAME)
.set(TABLENAME.COUNTER, TABLENAME.COUNTER == null ? 0 : TABLENAME.COUNTER.add(incrementValue))
.where(TABLENAME.ID.eq(id))
.execute();

这可能吗?我应该如何执行?

非常感谢!

最佳答案

为什么你的方法不起作用?

jOOQ 不会将任意 Java 表达式转换为 SQL。 IE。在将表达式传递给 jOOQ 之前,您的 TABLENAME.COUNTER == null 检查会在 Java 中进行评估。它永远不会在 SQL 中生成。而且由于 TABLENAME.COUNTER 作为生成代码,永远不会为 null,因此条件表达式实际上毫无意义。

解决方案

您可以使用DSL.coalesce()DSL.nvl()DSL.ifnull()

.set(TABLENAME.COUNTER, coalesce(TABLENAME.COUNTER, inline(-1)).add(incrementValue))

还有 Oracle 样式 DSL.nvl2()您可以使用的功能:

.set(TABLENAME.COUNTER, 
nvl2(TABLENAME.COUNTER, TABLENAME.COUNTER.add(incrementValue), inline(0)))

或者,写一个CASE expression

.set(TABLENAME.COUNTER, 
when(TABLENAME.COUNTER.isNull(), inline(0))
.otherwise(TABLENAME.COUNTER.add(incrementValue)))

与往常一样,上面假设您有以下静态导入:

import static org.jooq.impl.DSL.*;

关于java - JOOQ:更新空值的列值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52334114/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com