PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Làm cách nào để sử dụng toán tử PostgreSQL JSON (B) có chứa dấu chấm hỏi? qua JDBC

Có hai cách giải quyết khả thi:

Sử dụng câu lệnh tĩnh thay vì câu lệnh chuẩn bị sẵn

Đây là cách giải quyết đơn giản nhất, nhưng bạn sẽ mất tất cả các lợi ích từ các câu lệnh đã chuẩn bị (hiệu suất, bảo vệ chèn SQL, v.v.). Tuy nhiên, điều này sẽ hoạt động

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

Tránh người điều khiển. Sử dụng một chức năng thay thế (lưu ý:chỉ mục có thể không được sử dụng)

Các toán tử chỉ là đường cú pháp cho một hàm sao lưu tồn tại trong pg_catalog . Đây là cách tìm tên của các hàm này:

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

Các kết quả trên:

Hàm
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[])

Vì vậy, cách giải quyết đơn giản nhất là không sử dụng toán tử mà thay vào đó là hàm tương ứng:

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Truy vấn SQL để lấy hàng gần đây nhất cho mỗi trường hợp của một khóa nhất định

  2. Viết một tệp bằng nhiều chuỗi

  3. Tham gia bốn bảng liên quan đến THAM GIA TRÁI mà không có bản sao

  4. Trong khi thực hiện PITR, liệu có thể Tạm dừng / Tiếp tục trong PostgreSQL không?

  5. Đặt lại khóa chính PostgreSQL thành 1