如何使用多种“设置”方法创建“更新”
Posted
技术标签:
【中文标题】如何使用多种“设置”方法创建“更新”【英文标题】:How to create 'update' using multiple 'set' methods 【发布时间】:2022-01-09 21:59:55 【问题描述】:概要:我正在尝试使用 jOOQ 创建 SQL 更新
DSL.using(connection)
.update(DSL.table("dogs"))
.set(DSL.field("age"), DSL.field("age").add(1))
.set(DSL.field("rabies"), "true")
.where(DSL.field("id").eq("Kujo"))
.execute();
问题:
方法 set(Field
问题:如何使用 jOOQ 创建此更新?
【问题讨论】:
minimal reproducible example 在询问 SQL 问题时是一个很好的开始。不要忘记向我们展示您当前的 SQL 尝试。 @jarlh:关于这个例子,什么不是最小的或不可重现的? 没有样本数据,没有预期的结果。没有 SQL。 @jarlh:回答问题所需的一切都在那里。当问题与 jOOQ 以及为什么 Java 编译器无法编译 jOOQ 查询有关时,不需要示例数据、预期结果或 SQL。 我删除了你遇到了这个问题:Reference is ambiguous with generics
修正您的查询
在您的 jOOQ 表达式中附加数据类型总是一个好主意。在您的特定情况下,您可以通过指定以下内容来解决该问题:
DSL.field("age", SQLDataType.INTEGER)
或者,更短的,使用通常的静态导入:
field("age", INTEGER)
使用代码生成器
但是,jOOQ 最好与其code generator、see also this article here 一起使用。您不仅可以避免此类问题,还可以获得编译时类型安全(数据类型和元数据)、implicit joins 等高级功能等等。
您的查询将如下所示:
DSL.using(connection)
.update(DOGS)
.set(DOGS.AGE, DOGS.AGE.add(1))
.set(DOGS.RABIES, true)
.where(DOGS.ID.eq("Kujo"))
.execute();
【讨论】:
太棒了!非常感谢您的帮助卢卡斯。这是非常有用的 @***:有关为什么应该使用代码生成器的更多信息,另请参阅this article that I've written now,因为这些问题在没有代码生成的 jOOQ 用户中非常常见 感谢 Lukas,这对您很有帮助!以上是关于如何使用多种“设置”方法创建“更新”的主要内容,如果未能解决你的问题,请参考以下文章
如何使用具有多种主要方法的项目中的本机打包程序创建 RPM?
如何使用 MVC 模型动态过滤 javafx 中的列表视图控件,同时以多种方式更新? [关闭]