PostgreSQL 提供了各种运算符,包括 ?/?|/ 和 ?&,这有利于 JSON 处理。但是,PostgreSQL JDBC 驱动程序在解析包含这些运算符的 SQL 字符串时遇到困难。本文探讨了在 JDBC 中使用这些运算符的两种解决方法。
一种方法是使用静态语句而不是准备好的语句。虽然这种方法消除了准备好的语句的好处,但它有效地处理了运算符。
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 = '?|';
结果函数“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中文网其他相关文章!