ホームページ >データベース >mysql チュートリアル >「?」を含む PostgreSQL JSONB 演算子を処理する方法JDBCでは?

「?」を含む PostgreSQL JSONB 演算子を処理する方法JDBCでは?

DDD
DDDオリジナル
2025-01-01 02:20:10553ブラウズ

How to Handle PostgreSQL JSONB Operators Containing

疑問符「?」を含む PostgreSQL JSON(B) 演算子の使用JDBC

JDBC と PostgreSQL の統合では、? などの疑問符記号を備えた JSON 演算子を扱うときに課題が生じます。そして?|。 PostgreSQL JDBC ドライバーは、これらの文字を演算子ではなく通常のバインド変数として解釈します。

回避策

この問題に対処するには、次の 2 つの解決策が利用可能です。

静的ステートメント

この単純なアプローチでは、準備されたステートメント。パフォーマンスとセキュリティは犠牲になりますが、問題は解決されます。

try (Statement s = c.createStatement();
     ResultSet rs = s.executeQuery("select '{}'::jsonb ?| array['a', 'b']")) {
     ...
}

関数

PostgreSQL の演算子は、多くの場合、pg_catalog 内の関数のエイリアスです。演算子の基になる関数を見つけるには、次のクエリを使用します。

SELECT 
  oprname, 
  oprcode || '(' || format_type(oprleft, NULL::integer) || ', ' 
                 || format_type(oprright, NULL::integer) || ')' AS function
FROM pg_operator 
WHERE oprname = '?|';

このクエリは次のような結果を返します。

oprname  function
----------------------------------------------------------------------------------
?|       point_vert(point, point)
?|       lseg_vertical(-, lseg)
?|       line_vertical(-, line)
?|       jsonb_exists_any(jsonb, text[])    <--- this is the one we're looking for
?|       exists_any(hstore, 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 までご連絡ください。