ホームページ >データベース >mysql チュートリアル >PostgreSQL JSONB 演算子 (`?`、`?|`、`?&`、`/`) を JDBC プリペアド ステートメントで使用する方法
PostgreSQL には、?/?|/ や ?& などのさまざまな演算子が用意されています。これにより、JSON の処理が容易になります。ただし、PostgreSQL JDBC ドライバーは、これらの演算子を含む SQL 文字列を解析する際に問題が発生します。この記事では、JDBC でこれらの演算子を利用するための 2 つの回避策について説明します。
1 つのアプローチは、準備されたステートメントの代わりに静的ステートメントを使用することです。この方法ではプリペアド ステートメントの利点が失われますが、演算子は効果的に処理されます。
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 中国語 Web サイトの他の関連記事を参照してください。