当前位置: 首页 > 知识库问答 >
问题:

使用JOOQ更新PostgreSQL中的jsonb值

督飞羽
2023-03-14

在我的Java项目中,我是usinq、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

我犯错的地方?

共有1个答案

郭琨
2023-03-14

您使用的是dsl.field(String),它用于纯SQL模板,而本应使用dsl.val(String),它用于绑定值。

有关进一步澄清,请参阅这篇博客文章:https://blog.jooq.org/whats-a-string-in-the-jooq-api/

 类似资料:
  • 具有以下数据模型: 我需要将所有价格键更新为新名称cost。在静态字段上很容易做到这一点,使用: 结果: 但是我也需要在分解数组中做这些。 在不知道细分数组中的项目数的情况下,我如何做到这一点?换句话说,我如何在jsonb数组的每个元素上应用函数。 非常感谢。

  • 我有一个带有jsonb列的PostgreSQL表,其中包含一个字符串数组,这些字符串是标记值,如下所示:。我有一个自定义绑定,用于将JSON与jackson JSONode进行转换。 自定义绑定定义如下:https://gist.github.com/helgeg/0C0B14228F75E91B7542BD6979A05B49 用基本的find读取记录,然后我提取JSON列,如下所示: 这是使用

  • 本文向大家介绍postgresql 使用JSONb运算符,包括了postgresql 使用JSONb运算符的使用技巧和注意事项,需要的朋友参考一下 示例 创建数据库和表 填充数据库 让我们看一下表格中的所有内容: 输出: -> 运算符从JSON列中返回值 选择1列: 输出: 选择2列: 输出: -> 与 ->> 该->运算符返回原始JSON类型(可能是一个对象),而->>返回文本。 返回嵌套对象

  • 我正在使用(https://github.com/typeorm/typeorm)作为ORM库来连接postgresql数据库。我将几列保存为类型。现在我需要支持部分更新json数据,例如, 如果我只更新,我不想在更新语句中覆盖lastName。支持,我可以使用它来部分更新字段,但我如何使它与图书一起工作?

  • 问题内容: 使用运算符将产生以下结果: 我希望能够实现以下结果(对于操作员来说只是一个占位符): 因此,您可以看到顶级键的子值已“合并”,使得结果包含和。 如何在Postgres中“深度”合并两个 JSONB 值? 如果可能的话,这可能吗? 一个更复杂的测试用例: 原始“合并”并成为对象的另一个测试用例: 问题答案: 您应该合并两个值都使用的未嵌套元素。在不平凡的查询中执行此操作可能会感到不舒服,

  • 如何更新JSONB以将新键添加到所有记录的嵌套数组(用于数组的所有项目)中。 我指的是表结构的链接: 给定的json是: 要将新元素添加到每个数组项中,请执行以下查询: 执行上述查询后输出: 但是上面只会在id=1的地方更新json。对于orders中的所有行,需要进行哪些更改才能更新与上述相同的JSON?