>데이터 베이스 >MySQL 튜토리얼 >JDBC 준비 문에서 PostgreSQL JSONB 연산자(`?`, `?|`, `?&`, `/`)를 사용하는 방법은 무엇입니까?

JDBC 준비 문에서 PostgreSQL JSONB 연산자(`?`, `?|`, `?&`, `/`)를 사용하는 방법은 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-12-24 03:18:15852검색

How to Use PostgreSQL JSONB Operators (`?`, `?|`, `?&`, `/`) with JDBC Prepared Statements?

JDBC에서 물음표("?")와 함께 PostgreSQL JSON(B) 연산자 사용

PostgreSQL은 ?/?|/ 및 ?&를 포함한 다양한 연산자를 제공합니다. JSON 처리를 용이하게 합니다. 그러나 PostgreSQL JDBC 드라이버는 이러한 연산자가 포함된 SQL 문자열을 구문 분석하는 데 어려움을 겪습니다. 이 기사에서는 JDBC에서 이러한 연산자를 활용하기 위한 두 가지 해결 방법을 살펴봅니다.

해결책 1: 정적 문

한 가지 접근 방식은 준비된 문 대신 정적 문을 사용하는 것입니다. 이 방법은 준비된 문의 이점을 제거하지만 연산자를 효과적으로 처리합니다.

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

해결책 2: 함수 대체

연산자는 pg_catalog의 함수에 해당하는 단순한 구문 구조입니다. 이러한 함수를 식별하면 연산자를 사용하지 않고도 직접 호출할 수 있습니다. 이 방법은 인덱싱 효율성에 영향을 미칠 수 있습니다.

해당 함수를 찾으려면 다음 SQL 쿼리를 실행하세요.

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

결과 함수 "jsonb_exists_any(jsonb, text[])"는 다음과 같습니다. 준비된 진술에 사용됩니다:

try (PreparedStatement s = c.prepareStatement(
         "select jsonb_exists_any('{}'::jsonb, array['a', 'b']");
     ResultSet rs = s.executeQuery()) {
     ...
}

위 내용은 JDBC 준비 문에서 PostgreSQL JSONB 연산자(`?`, `?|`, `?&`, `/`)를 사용하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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