Heim >Datenbank >MySQL-Tutorial >Wie verwende ich PostgreSQL-JSONB-Operatoren (`?`, `?|`, `?&`, `/`) mit vorbereiteten JDBC-Anweisungen?

Wie verwende ich PostgreSQL-JSONB-Operatoren (`?`, `?|`, `?&`, `/`) mit vorbereiteten JDBC-Anweisungen?

Susan Sarandon
Susan SarandonOriginal
2024-12-24 03:18:15862Durchsuche

How to Use PostgreSQL JSONB Operators (`?`, `?|`, `?&`, `/`) with JDBC Prepared Statements?

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

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.

Lösung 1: Statische Anweisungen

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

Lösung 2: Funktionssubstitution

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!

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