首页 > 数据库 > mysql教程 > 如何使用 PostgreSQL 的 JSON(B) 运算符和'?”在 JDBC 中?

如何使用 PostgreSQL 的 JSON(B) 运算符和'?”在 JDBC 中?

Barbara Streisand
发布: 2024-12-23 15:38:15
原创
245 人浏览过

How to Use PostgreSQL's JSON(B) Operators with

了解 JDBC 中带有问号“”?”的 PostgreSQL JSON(B) 运算符

PostgreSQL 提供了独特的 JSON 运算符,其中包括名称中包含问号字符,例如 ? 表示键是否存在,?| 表示数组字符串是否存在。但是,官方 PostgreSQL JDBC 驱动程序遇到了困难。解析包含这些运算符的 SQL 字符串,错误地将它们解释为 JDBC 绑定变量。

通过 JDBC 使用此类运算符的解决方法

要在 JDBC 中成功利用这些运算符,考虑以下解决方法:

利用静态语句

这种基本解决方法消除了预准备语句的使用,允许 SQL 字符串作为静态语句执行,但是,它牺牲了预准备语句的优点。

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

使用函数

运算符本质上是语法pg_catalog 中支持函数的别名允许您直接使用它。例如:

SELECT 
  oprname, 
  oprcode || '(' || format_type(oprleft,  NULL::integer) || ', ' 
                 || format_type(oprright, NULL::integer) || ')' AS function
FROM pg_operator 
WHERE oprname = '?|';
登录后复制

这会产生以下结果:

oprname  function
----------------------------------------------------------------------------------
?|       point_vert(point, point)
?|       lseg_vertical(-, lseg)
?|       line_vertical(-, line)
?|       jsonb_exists_any(jsonb, text[])    <--- this is the one we're looking for
?|       exists_any(hstore, text[])
登录后复制

解决方法包括将运算符替换为其相应的函数:

try (PreparedStatement s = c.prepareStatement(
         "select jsonb_exists_any('{}'::jsonb, array['a', 'b']");
     ResultSet rs = s.executeQuery()) {
     ...
}
登录后复制

以上是如何使用 PostgreSQL 的 JSON(B) 运算符和'?”在 JDBC 中?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板