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!