Hành vi này khá khó chịu vì các chuỗi JSON được chấp nhận mà không gặp vấn đề gì khi được sử dụng làm chuỗi ký tự trong các lệnh SQL.
Đã xảy ra sự cố cho vấn đề này trong kho lưu trữ Github của trình điều khiển postgres (ngay cả khi vấn đề có vẻ là do quá trình xử lý phía máy chủ).
Bên cạnh việc sử dụng diễn viên (xem câu trả lời của @ a_horse_with_no_name) trong chuỗi sql, tác giả vấn đề đưa ra hai giải pháp bổ sung:
- Sử dụng một tham số
stringtype=unspecified
trong URL / tùy chọn kết nối JDBC.
Điều này cho PostgreSQL biết rằng tất cả các tham số văn bản hoặc varchar thực sự thuộc loại không xác định, cho phép nó suy ra các loại của chúng một cách tự do hơn.
- Bao bọc tham số trong
org.postgresql.util.PGobject
:
PGobject jsonObject = new PGobject();
jsonObject.setType("json");
jsonObject.setValue(yourJsonString);
pstmt.setObject(11, jsonObject);