Heim > Datenbank > MySQL-Tutorial > Wie gehe ich mit PostgreSQL-JSONB-Operatoren um, die „?' enthalten? in JDBC?

Wie gehe ich mit PostgreSQL-JSONB-Operatoren um, die „?' enthalten? in JDBC?

DDD
Freigeben: 2025-01-01 02:20:10
Original
551 Leute haben es durchsucht

How to Handle PostgreSQL JSONB Operators Containing

Verwenden von PostgreSQL-JSON(B)-Operatoren mit Fragezeichen „?“ in JDBC

Die JDBC-Integration mit PostgreSQL stellt eine Herausforderung dar, wenn es um JSON-Operatoren geht, die das Fragezeichensymbol enthalten, z. B. ? und ?|. Der PostgreSQL-JDBC-Treiber interpretiert diese Zeichen als gewöhnliche Bindevariablen und nicht als Operatoren.

Problemumgehungen

Es stehen zwei Lösungen zur Behebung dieses Problems zur Verfügung:

Statische Aussagen

Dieser unkomplizierte Ansatz vermeidet die Verwendung vorbereiteter Aussagen. Es beeinträchtigt zwar Leistung und Sicherheit, löst aber das Problem:

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

Funktionen

Operatoren in PostgreSQL sind oft Aliase für Funktionen im pg_catalog. Um die zugrunde liegende Funktion für einen Operator zu finden, verwenden Sie die folgende Abfrage:

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

Diese Abfrage gibt ein Ergebnis ähnlich dem folgenden zurück:

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

Mit diesen Informationen können Sie die zugrunde liegende Funktion verwenden Funktion anstelle des Operators:

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 gehe ich mit PostgreSQL-JSONB-Operatoren um, die „?' enthalten? 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage