PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Bagaimana cara menggunakan operator PostgreSQL JSON(B) yang berisi tanda tanya? melalui JDBC

Ada dua kemungkinan solusi:

Gunakan pernyataan statis, bukan pernyataan siap

Ini adalah solusi paling sederhana, tetapi Anda kehilangan semua manfaat dari pernyataan yang disiapkan (kinerja, perlindungan injeksi SQL, dll.). Namun, ini akan berhasil

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

Hindari operator. Gunakan fungsi sebagai gantinya (catatan:indeks mungkin tidak digunakan)

Operator hanyalah gula sintaks untuk fungsi pendukung yang ada di pg_catalog . Berikut cara mencari nama fungsi tersebut:

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

Hasil di atas:

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[])

Jadi, solusi paling sederhana adalah dengan tidak menggunakan operator, tetapi fungsi yang sesuai sebagai gantinya:

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. SQLAlchemy - SQLite untuk pengujian dan Postgresql untuk pengembangan - Bagaimana cara mem-port?

  2. Pengecualian dalam JPA saat menggunakan file benih untuk PostgreSQL

  3. Deteksi item duplikat dalam CTE rekursif

  4. Kembali sebagai array objek JSON di SQL (Postgres)

  5. Bagaimana cara menambahkan Kolom baru di tabel setelah kolom ke-2 atau ke-3 di Tabel menggunakan postgres?