집 >데이터 베이스 >MySQL 튜토리얼 >'?'가 포함된 PostgreSQL JSONB 연산자를 처리하는 방법 JDBC에서?
물음표 "?"가 포함된 PostgreSQL JSON(B) 연산자 사용 JDBC
PostgreSQL과 JDBC 통합은 ?와 같은 물음표 기호가 포함된 JSON 연산자를 처리할 때 문제를 제기합니다. 그리고 ?|. PostgreSQL JDBC 드라이버는 이러한 문자를 연산자가 아닌 일반 바인드 변수로 해석합니다.
해결 방법
이 문제를 해결하기 위해 사용할 수 있는 두 가지 솔루션은 다음과 같습니다.
정적 문
이 간단한 접근 방식을 사용하면 준비된 진술. 성능과 보안은 손상되지만 문제는 해결됩니다.
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!