开发者社区> 问答> 正文

使用 Java 操作 PostgreSQL 的 JSONB 数据类型时处理 SQ?400报错

PostgreSQL 的 JSONB 可以很方便的用来存储和处理 JSON 数据,例如这样的查询

select '{}'::jsonb ?| array['a', 'b']

但是当你通过 JDBC 的 PreparedStatement 来执行的时候会报错

ERROR: syntax error at or near "$1"

这是因为 PreparedStatement 会解析 SQL 中的问号当成动态参数来处理。

这种情况有两种处理办法:

1. 使用静态的 Statement 而不是 PreparedStatement

try (Statement s = c.createStatement();
     ResultSet rs = s.executeQuery("select '{}'::jsonb ?| array['a', 'b']")) {
     ...
}

2. 使用函数来替代操作符

例如上面的 SQL 可以改成

select jsonb_exists_any('{}'::jsonb, array['a', 'b']"

搞定!

展开
收起
爱吃鱼的程序员 2020-06-07 18:31:31 1387 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB
                        <p>select jsonb_exists('{"content": "很漂亮呢"}'::jsonb, 'content');</p> 
    

    select not jsonb_exists('{"content": "很漂亮呢"}'::jsonb, 'content');

    2020-06-07 18:31:58
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
One Box: 解读事务与分析一体化数据库 HybridDB for MySQL 立即下载
One Box:解读事务与分析一体化数据库HybridDB for MySQL 立即下载
如何支撑HTAP场景-HybridDB for MySQL系统架构和技术演进 立即下载

相关镜像