Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mengendalikan Operator JSONB PostgreSQL yang Mengandungi '?' dalam JDBC?
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']")) { ... }
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 = '?|';
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[])
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()) { ... }
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!