sql >> Database teknologi >  >> RDS >> PostgreSQL

Hvordan bruger jeg PostgreSQL JSON(B)-operatorer, der indeholder et spørgsmålstegn? via JDBC

Der er to mulige løsninger:

Brug statiske udsagn i stedet for forberedte udsagn

Dette er den enkleste løsning, men du mister alle fordelene ved forberedte sætninger (ydelse, SQL-injektionsbeskyttelse osv.). Dette vil dog virke

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

Undgå operatøren. Brug en funktion i stedet (bemærk:indekser bruges muligvis ikke)

Operatører er kun syntaks sukker for en backing-funktion, der findes i pg_catalog . Sådan finder du navnet på disse funktioner:

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

Ovenstående giver:

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

Så den enkleste løsning er bare ikke at bruge operatoren, men den tilsvarende funktion i stedet:

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



  1. Få feltværdien med en markør

  2. Opdeling på et budget

  3. Hvordan konverteres tekst til tal effektivt i Oracle PL/SQL med ikke-standard NLS_NUMERIC_CHARACTERS?

  4. Find referenceenheder i SQL Server:sys.dm_sql_referencing_entities()