java - Postgres 查询 - 使用文本类型更新 json 列中的字段

标签 java postgresql jdbc

我的 postgres 数据库中有一个名为 metadata 的列,它存储 JSON 字符串,类型为 TEXT

我正在尝试运行查询来更新 JSON 中名为 myCount 的字段。我正在使用 Spring Boot 和 JDBC。

String query = "UPDATE " + mTableName + " SET metadata = jsonb_set(metadata::jsonb, '{myCount}', ?)::text" +
                " WHERE scope = ?";
        PreparedStatement preparedStmt = jdbcTemplate.getDataSource().getConnection().prepareStatement(query);
        preparedStmt.setInt   (1, myCount);
        preparedStmt.setString(2, scope);

        // execute the java preparedstatement
        return preparedStmt.executeUpdate();

我收到以下错误:错误:函数 jsonb_set(jsonb,unknown,integer) 不

有什么想法可以运行更新 JSON 中的 myCount 列的查询吗?

最佳答案

function jsonb_set(jsonb, unknown, integer) does not

告诉您正在尝试使用整数值作为最后一个参数来调用函数。但该函数定义为jsonb_set(jsonb, text[], jsonb)因此您需要将整数值转换为 JSONB 值:

SET metadata = jsonb_set(metadata::jsonb, '{myCount}'::text[], to_jsonb(?))::text" 

关于java - Postgres 查询 - 使用文本类型更新 json 列中的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60726157/

相关文章:

Java:如何创建最终子数组?

java - 在任意事物的列表(数组)中创建关联的最佳方法是什么?

java - 在这种情况下,编译器中实际发生了什么

sql - Postgresql:如何在输出中插入行值,即使它不存在于列中

json - 为什么planet_osm_ways表中tags列的数据类型不是JSON格式?

java - 为什么即使我使用 JDBC Driver 4.0 也需要在 Tomcat Web 应用程序中调用 Class.forName?

java - 迭代作为参数传递的 google multimap

postgresql - 如何获取 PostgreSQL 中的行策略列表?

java - PreparedStatements 或 callableStatements

java - 为什么 JDBC 使用原语而不是包装类?