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
Freigeben: 2024-12-23 15:38:15
Original
278 Leute haben es durchsucht

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']")) {
     ...
}
Nach dem Login kopieren

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 = '?|';
Nach dem Login kopieren

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[])
Nach dem Login kopieren

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()) {
     ...
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage