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

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

Susan Sarandon
Susan Sarandon原创
2024-12-24 03:18:15892浏览

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn