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

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

Linda Hamilton
リリース: 2024-12-22 18:52:10
オリジナル
1031 人が閲覧しました

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 までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート