ホームページ >データベース >mysql チュートリアル >「?」を含む PostgreSQL JSONB 演算子を処理する方法JDBCでは?
疑問符「?」を含む 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 サイトの他の関連記事を参照してください。