>데이터 베이스 >MySQL 튜토리얼 >'?'가 포함된 PostgreSQL JSONB 연산자를 처리하는 방법 JDBC에서?

'?'가 포함된 PostgreSQL JSONB 연산자를 처리하는 방법 JDBC에서?

DDD
DDD원래의
2025-01-01 02:20:10566검색

How to Handle PostgreSQL JSONB Operators Containing

물음표 "?"가 포함된 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.