首页 > 数据库 > mysql教程 > 如何将 PostgreSQL JSONB 运算符(`?`、`?|`、`?&`、`/`)与 JDBC 准备语句结合使用?

如何将 PostgreSQL JSONB 运算符(`?`、`?|`、`?&`、`/`)与 JDBC 准备语句结合使用?

Susan Sarandon
发布: 2024-12-24 03:18:15
原创
853 人浏览过

How to Use PostgreSQL JSONB Operators (`?`, `?|`, `?&`, `/`) with JDBC Prepared Statements?

在 JDBC 中使用带有问号(“?”)的 PostgreSQL JSON(B) 运算符

PostgreSQL 提供了各种运算符,包括 ?/?|/ 和 ?&,这有利于 JSON 处理。但是,PostgreSQL JDBC 驱动程序在解析包含这些运算符的 SQL 字符串时遇到困难。本文探讨了在 JDBC 中使用这些运算符的两种解决方法。

解决方案 1:静态语句

一种方法是使用静态语句而不是准备好的语句。虽然这种方法消除了准备好的语句的好处,但它有效地处理了运算符。

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

解决方案 2:函数替换

运算符只是与 pg_catalog 中的函数相对应的语法结构。通过识别这些函数,您可以直接调用它们,而无需使用运算符。此方法可能会影响索引效率。

要查找相应的函数,请执行以下 SQL 查询:

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

结果函数“jsonb_exists_any(jsonb, text[])”可以用于准备好的语句中:

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

以上是如何将 PostgreSQL JSONB 运算符(`?`、`?|`、`?&`、`/`)与 JDBC 准备语句结合使用?的详细内容。更多信息请关注PHP中文网其他相关文章!

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