首页 >数据库 >mysql教程 >如何处理包含'?”的 PostgreSQL JSONB 运算符在 JDBC 中?

如何处理包含'?”的 PostgreSQL JSONB 运算符在 JDBC 中?

DDD
DDD原创
2025-01-01 02:20:10553浏览

How to Handle PostgreSQL JSONB Operators Containing

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

JDBC 与 PostgreSQL 的集成在处理带有问号符号的 JSON 运算符(例如?)时带来了挑战。和?|。 PostgreSQL JDBC 驱动程序将这些字符解释为普通绑定变量而不是运算符。

解决方法

有两种解决方案可以解决此问题:

静态语句

这种简单的方法避免了使用准备好的声明。虽然它会损害性能和安全性,但它解决了问题:

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

函数

PostgreSQL 中的运算符通常是 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 JSONB 运算符在 JDBC 中?的详细内容。更多信息请关注PHP中文网其他相关文章!

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