Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Mengendalikan Operator JSONB PostgreSQL yang Mengandungi '?' dalam JDBC?

Bagaimana untuk Mengendalikan Operator JSONB PostgreSQL yang Mengandungi '?' dalam JDBC?

DDD
Lepaskan: 2025-01-01 02:20:10
asal
612 orang telah melayarinya

How to Handle PostgreSQL JSONB Operators Containing

Menggunakan Operator PostgreSQL JSON(B) yang Mengandungi Tanda Soalan "?" dalam JDBC

Integrasi JDBC dengan PostgreSQL menimbulkan cabaran apabila berurusan dengan pengendali JSON yang menampilkan simbol tanda soal, seperti ? dan ?|. Pemacu PostgreSQL JDBC mentafsirkan aksara ini sebagai pembolehubah ikatan biasa dan bukannya pengendali.

Penyelesaian

Dua penyelesaian tersedia untuk menangani isu ini:

Pernyataan Statik

Pendekatan mudah ini mengelakkan penggunaan pernyataan yang disediakan. Walaupun ia menjejaskan prestasi dan keselamatan, ia menyelesaikan masalah:

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

Fungsi

Pengendali dalam PostgreSQL selalunya alias untuk fungsi dalam pg_catalog. Untuk mencari fungsi asas bagi pengendali, gunakan pertanyaan berikut:

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

Pertanyaan ini akan mengembalikan hasil yang serupa dengan:

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[])
Salin selepas log masuk

Dengan maklumat ini, anda boleh menggunakan asas fungsi bukannya pengendali:

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

Atas ialah kandungan terperinci Bagaimana untuk Mengendalikan Operator JSONB PostgreSQL yang Mengandungi '?' dalam JDBC?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan