PostgreSQL は、キーの存在には ?、配列文字列の存在には ?| など、名前に疑問符が含まれています。 PostgreSQL JDBC ドライバーは、これらの演算子を含む SQL 文字列の解析で問題が発生し、それらの演算子を JDBC バインド変数として誤って解釈します。
正常に利用するにはJDBC のこれらの演算子については、次の点を考慮してください。回避策:
try (Statement s = c.createStatement(); ResultSet rs = s.executeQuery("select '{}'::jsonb ?| array['a', 'b']")) { ... }
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 の JSON(B) 演算子を「?」で使用する方法JDBCでは?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。