PostgreSQL verwendet ASCII-Operatoren, die das Fragezeichenzeichen „?“ für JSON-Operationen enthalten. Allerdings interpretiert der offizielle PostgreSQL-JDBC-Treiber diese Fragezeichen als gewöhnliche JDBC-Bind-Variablen, was zu Fehlern bei der Verwendung führt sie.
Um diese Operatoren über JDBC zu verwenden, sind zwei Problemumgehungen anwendbar:
Statische Anweisungen:
Verwenden Sie statische Anweisungen Dieser Ansatz vereinfacht die Verwendung, eliminiert jedoch die Vorteile vorbereiteter Anweisungen, einschließlich Leistungssteigerungen und SQL-Injection Schutz.
try (Statement s = c.createStatement(); ResultSet rs = s.executeQuery("select '{}'::jsonb ?| array['a', 'b']")) { ... }
Funktionsbasierter Ansatz:
Vermeiden Sie die Operatoren, indem Sie die zugrunde liegenden Funktionen verwenden, die in pg_catalog verfügbar sind, um den Funktionsnamen zu identifizieren, der einem bestimmten Operator zugeordnet ist , führen Sie die folgende SQL-Abfrage aus:
SELECT oprname, oprcode || '(' || format_type(oprleft, NULL::integer) || ', ' || format_type(oprright, NULL::integer) || ')' AS function FROM pg_operator WHERE oprname = '?|';
Für den „?|““-Operator dies ergibt:
oprname function ---------------------------------------------------------------------------------- ?| jsonb_exists_any(jsonb, text[])
Ersetzen Sie den Operator durch die entsprechende Funktion in der JDBC-Anweisung:
try (PreparedStatement s = c.prepareStatement( "select jsonb_exists_any('{}'::jsonb, array['a', 'b']"); ResultSet rs = s.executeQuery()) { ... }
Das obige ist der detaillierte Inhalt vonWie gehe ich mit PostgreSQL-JSON(B)-Operatoren mit Fragezeichen mithilfe von JDBC um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!