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中文網其他相關文章!