Heim >Datenbank >MySQL-Tutorial >Wie verwende ich die JSON(B)-Operatoren von PostgreSQL mit „?' in JDBC?

Wie verwende ich die JSON(B)-Operatoren von PostgreSQL mit „?' in JDBC?

Barbara Streisand
Barbara StreisandOriginal
2024-12-23 15:38:15274Durchsuche

How to Use PostgreSQL's JSON(B) Operators with

Grundlegendes zu PostgreSQL-JSON(B)-Operatoren mit Fragezeichen „?“ 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.

Problemumgehungen für die Verwendung solcher Operatoren über JDBC

Um diese Operatoren erfolgreich zu verwenden JDBC, berücksichtigen Sie die folgenden Problemumgehungen:

Utilize Static Anweisungen

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']")) {
     ...
}

Employ Functions

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn