首頁 >資料庫 >mysql教程 >如何將 PostgreSQL JSONB 運算子(`?`、`?|`、`?&`、`/`)與 JDBC 準備語句結合使用?

如何將 PostgreSQL JSONB 運算子(`?`、`?|`、`?&`、`/`)與 JDBC 準備語句結合使用?

Susan Sarandon
Susan Sarandon原創
2024-12-24 03:18:15858瀏覽

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