首页 >数据库 >mysql教程 >如何使用 JDBC 处理带问号的 PostgreSQL JSON(B) 运算符?

如何使用 JDBC 处理带问号的 PostgreSQL JSON(B) 运算符?

Linda Hamilton
Linda Hamilton原创
2024-12-22 18:52:10965浏览

How to Handle PostgreSQL JSON(B) Operators with Question Marks Using JDBC?

通过 JDBC 处理带有问号字符的 PostgreSQL JSON(B) 运算符

PostgreSQL 使用包含问号“”?”字符的 ASCII-art 运算符进行 JSON 操作。然而官方的 PostgreSQL JDBC 驱动程序将这些问号解释为普通的 JDBC 绑定变量,导致使用时出错

解决方法

要通过 JDBC 使用这些运算符,有两种解决方法适用:

静态语句:

使用静态这种方法简化了使用,但消除了准备语句的优点,包括性能提升和 SQL 注入。

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

基于函数的方法:

通过使用 pg_catalog 中可用的底层函数来避免使用运算符来识别与特定运算符关联的函数名称。 ,执行以下 SQL 查询:

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

对于“?|””运算符,此产生:

oprname  function
----------------------------------------------------------------------------------
?|       jsonb_exists_any(jsonb, text[])

将运算符替换为 JDBC 语句中相应的函数:

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

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

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