Heim >Datenbank >MySQL-Tutorial >Wie verwende ich die JSON(B)-Operatoren von PostgreSQL mit „?' in JDBC?
PostgreSQL bietet einzigartige JSON-Operatoren, die Folgendes umfassen: Fragezeichenzeichen in ihren Namen, z. B. ? für das Vorhandensein von Schlüsseln und ?| für das Vorhandensein von Array-Strings. Der offizielle PostgreSQL-JDBC-Treiber stößt auf Schwierigkeiten beim Parsen von SQL-Zeichenfolgen, die diese Operatoren enthalten, und interpretiert sie fälschlicherweise als JDBC-Bindungsvariablen.
Um diese Operatoren erfolgreich zu verwenden JDBC, berücksichtigen Sie die folgenden Problemumgehungen:
Diese grundlegende Problemumgehung macht die Verwendung vorbereiteter Anweisungen überflüssig und ermöglicht die Ausführung der SQL-Zeichenfolge als statische Anweisung. Allerdings werden dadurch die Vorteile vorbereiteter Anweisungen geopfert.
try (Statement s = c.createStatement(); ResultSet rs = s.executeQuery("select '{}'::jsonb ?| array['a', 'b']")) { ... }
Operatoren sind im Wesentlichen syntaktische Aliase für Hintergrundfunktionen im pg_catalog. Durch die Identifizierung des Funktionsnamens können Sie ihn direkt verwenden. Zum Beispiel:
SELECT oprname, oprcode || '(' || format_type(oprleft, NULL::integer) || ', ' || format_type(oprright, NULL::integer) || ')' AS function FROM pg_operator WHERE oprname = '?|';
Dies führt zu folgendem Ergebnis:
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[])
Die Problemumgehung besteht darin, den Operator durch die entsprechende Funktion zu ersetzen:
try (PreparedStatement s = c.prepareStatement( "select jsonb_exists_any('{}'::jsonb, array['a', 'b']"); ResultSet rs = s.executeQuery()) { ... }
Das obige ist der detaillierte Inhalt vonWie verwende ich die JSON(B)-Operatoren von PostgreSQL mit „?' in JDBC?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!