gpt4 book ai didi

postgresql - jOOQ 的字段未在 SQL 中转换 {0}

转载 作者:行者123 更新时间:2023-12-04 10:26:20 26 4
gpt4 key购买 nike

我有一个这样声明的 jOOQ 字段(这是一个过度简化):

field("INTERVAL '{0} minutes'", Duration.class, X)

我希望生成一个可以在查询中使用的 X 分钟的持续时间,但它始终生成 0 分钟的持续时间。我用 toString 检查了生成的 SQL我看到而不是预期的 INTERVAL '30 minutes' jOOQ 生成 INTERVAL '{0} minutes' ,所以,它正在处理 {0}作为文字而不是用模板变量替换它。

这就是我测试的方式,这个:
using(configuration).select(field("INTERVAL '30 minutes'", Duration.class)).toString()

产量:
select INTERVAL '30 minutes'

而这:
using(configuration).select(field("INTERVAL '{0} minutes'", Duration.class, 30)).toString()

产量:
select INTERVAL '{0} minutes'

这种行为有解决方法吗?

最佳答案

正如你所展示的 in your own answer ,并且正如 jOOQ's plain SQL templating feature 所记录的那样,模板预处理字符串文字(和注释,以及其他一些东西),以防止修改它们。

But you should never resort to concatenating strings with jOOQ .总有更好的方法。你可以这样做,例如:

field("INTERVAL {0}", Duration.class, DSL.inline(X + " minutes"))

我知道。我仍在连接字符串。但我是在一个“安全的地方”做的,由 DSL.inline() 包裹。 (或 DSL.val() ),它产生正确转义的文字(或绑定(bind)变量)。我的意思是永远不应该有连接 SQL 片段的理由,即使使用普通的 SQL 模板也是如此。

关于postgresql - jOOQ 的字段未在 SQL 中转换 {0},我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60622174/

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