使用 JOOQ 更新 PostgreSQL 中的 jsonb 值
Posted
技术标签:
【中文标题】使用 JOOQ 更新 PostgreSQL 中的 jsonb 值【英文标题】:Update jsonb value in PostgreSQL using JOOQ 【发布时间】:2021-12-31 21:36:56 【问题描述】:在我的 Java 项目中,我使用的是 JOOQ,我想更新 JSONB 值。 但是我的构建失败了。
我写了一个代码:
DSL.using(connection).update(USER_SETTINGS)
.set(USER_SETTINGS.SETTING_VALUE, field("\"filtersValue\":\"page\":0,\"size\":100, \"visibleCount\":100", JSONB.class))
.where(USER_SETTINGS.USER_ID.eq(98383L))
.execute();
我收到了下一条消息:
org.jooq.exception.DataAccessException:
SQL [update "sbcm_sys"."user_settings" set "setting_value" = "filtersValue":"page":0,"size":100, "visibleCount":100 where "sbcm_sys"."user_settings"."user_id" = ?]; ERROR: syntax err
or at or near ":"
Position: 71
Caused by: org.postgresql.util.PSQLException:
ERROR: syntax error at or near ":"
Position: 71
我哪里做错了?
【问题讨论】:
我将 field() 更改为 val() 并且成功了! 【参考方案1】:您使用的是DSL.field(String)
,它用于plain SQL templating,而您原本打算使用DSL.val(String)
,它用于bind values。
有关进一步说明,另请参阅此博客文章:https://blog.jooq.org/whats-a-string-in-the-jooq-api/
【讨论】:
以上是关于使用 JOOQ 更新 PostgreSQL 中的 jsonb 值的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 jOOQ 更新 PostgreSQL 上复合列的单个子字段?
jOOQ:比较 uuid(来自 postgresql)和字符串(类中的用户 id)