ホームページ >データベース >mysql チュートリアル >JDBC を使用して疑問符が付いた PostgreSQL JSON(B) 演算子を処理する方法

JDBC を使用して疑問符が付いた PostgreSQL JSON(B) 演算子を処理する方法

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-22 18:52:10965ブラウズ

How to Handle PostgreSQL JSON(B) Operators with Question Marks Using JDBC?

JDBC を介した疑問符文字を含む PostgreSQL JSON(B) 演算子の処理

PostgreSQL は、JSON 操作に疑問符「"?」文字を含む ASCII アート演算子を利用します。ただし、公式の PostgreSQL JDBC ドライバーはこれらの疑問符を通常の JDBC バインド変数として解釈するため、使用時にエラーが発生します。

回避策

JDBC 経由でこれらの演算子を使用するには、次の 2 つの回避策が適用できます。

静的ステートメント:

静的を使用するこのアプローチでは、プリペアド ステートメントの使用が簡素化されますが、パフォーマンスの向上や SQL インジェクションなど、プリペアド ステートメントの利点が失われます。保護。

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 = '?|';

「?|"」演算子の場合、これは結果:

oprname  function
----------------------------------------------------------------------------------
?|       jsonb_exists_any(jsonb, text[])

演算子を JDBC ステートメント内の対応する関数に置き換えます:

try (PreparedStatement s = c.prepareStatement(
         "select jsonb_exists_any('{}'::jsonb, array['a', 'b']");
     ResultSet rs = s.executeQuery()) {
     ...
}

以上がJDBC を使用して疑問符が付いた PostgreSQL JSON(B) 演算子を処理する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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