ホームページ >データベース >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 でこれらの演算子を利用するための 2 つの回避策について説明します。

解決策 1: 静的ステートメント

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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。