PostgreSQL bietet verschiedene Operatoren, darunter ?/?|/ und ?&, die die JSON-Verarbeitung erleichtern. Allerdings stößt der PostgreSQL-JDBC-Treiber auf Schwierigkeiten beim Parsen von SQL-Zeichenfolgen, die diese Operatoren enthalten. In diesem Artikel werden zwei Problemumgehungen für die Verwendung dieser Operatoren in JDBC untersucht.
Ein Ansatz besteht darin, statische Anweisungen anstelle vorbereiteter Anweisungen zu verwenden. Während diese Methode die Vorteile vorbereiteter Anweisungen eliminiert, verarbeitet sie Operatoren effektiv.
try (Statement s = c.createStatement(); ResultSet rs = s.executeQuery("select '{}'::jsonb ?| array['a', 'b']")) { ... }
Operatoren sind bloße syntaktische Konstrukte, die Funktionen im pg_catalog entsprechen. Durch die Identifizierung dieser Funktionen können Sie sie direkt aufrufen, ohne Operatoren zu verwenden. Diese Methode kann Auswirkungen auf die Indizierungseffizienz haben.
Um die entsprechende Funktion zu finden, führen Sie die folgende SQL-Abfrage aus:
SELECT oprname, oprcode || '(' || format_type(oprleft, NULL::integer) || ', ' || format_type(oprright, NULL::integer) || ')' AS function FROM pg_operator WHERE oprname = '?|';
Die resultierende Funktion „jsonb_exists_any(jsonb, text[])“ kann in vorbereiteten Aussagen verwendet werden:
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 PostgreSQL-JSONB-Operatoren (`?`, `?|`, `?&`, `/`) mit vorbereiteten JDBC-Anweisungen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!