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
DDDOriginal
2025-01-01 02:20:10613Durchsuche

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

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 = '?|';

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[])

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()) {
     ...
}

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!

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