Heim >Datenbank >MySQL-Tutorial >Wie gehe ich mit PostgreSQL-JSON(B)-Operatoren mit Fragezeichen mithilfe von JDBC um?

Wie gehe ich mit PostgreSQL-JSON(B)-Operatoren mit Fragezeichen mithilfe von JDBC um?

Linda Hamilton
Linda HamiltonOriginal
2024-12-22 18:52:101032Durchsuche

How to Handle PostgreSQL JSON(B) Operators with Question Marks Using JDBC?

Umgang mit PostgreSQL-JSON(B)-Operatoren mit Fragezeichenzeichen über JDBC

PostgreSQL verwendet ASCII-Operatoren, die das Fragezeichenzeichen „?“ für JSON-Operationen enthalten. Allerdings interpretiert der offizielle PostgreSQL-JDBC-Treiber diese Fragezeichen als gewöhnliche JDBC-Bind-Variablen, was zu Fehlern bei der Verwendung führt sie.

Problemumgehungen

Um diese Operatoren über JDBC zu verwenden, sind zwei Problemumgehungen anwendbar:

Statische Anweisungen:

Verwenden Sie statische Anweisungen Dieser Ansatz vereinfacht die Verwendung, eliminiert jedoch die Vorteile vorbereiteter Anweisungen, einschließlich Leistungssteigerungen und SQL-Injection Schutz.

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

Funktionsbasierter Ansatz:

Vermeiden Sie die Operatoren, indem Sie die zugrunde liegenden Funktionen verwenden, die in pg_catalog verfügbar sind, um den Funktionsnamen zu identifizieren, der einem bestimmten Operator zugeordnet ist , 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 = '?|';

Für den „?|““-Operator dies ergibt:

oprname  function
----------------------------------------------------------------------------------
?|       jsonb_exists_any(jsonb, text[])

Ersetzen Sie den Operator durch die entsprechende Funktion in der JDBC-Anweisung:

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-JSON(B)-Operatoren mit Fragezeichen mithilfe von JDBC um?. 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