如何使用多种“设置”方法创建“更新”

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, Object) 对于 UpdateSetFirstStep 类型不明确

问题:如何使用 jOOQ 创建此更新?

【问题讨论】:

minimal reproducible example 在询问 SQL 问题时是一个很好的开始。不要忘记向我们展示您当前的 SQL 尝试。 @jarlh:关于这个例子,什么不是最小的或不可重现的? 没有样本数据,没有预期的结果。没有 SQL。 @jarlh:回答问题所需的一切都在那里。当问题与 jOOQ 以及为什么 Java 编译器无法编译 jOOQ 查询有关时,不需要示例数据、预期结果或 SQL。 我删除了 标签,因为这似乎不需要任何 SQL 帮助。 【参考方案1】:

你遇到了这个问题: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 中的列表视图控件,同时以多种方式更新? [关闭]

如何使用 @Build 为 grails 集成测试创建多种类型的测试数据

如何设置具有多种货币的捐赠贝宝按钮?

如何设置多种货币的捐赠paypal按钮?

如何使用 JPQL 创建动态更新查询?