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
Freigeben: 2024-12-22 18:52:10
Original
961 Leute haben es durchsucht

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']")) {
     ...
}
Nach dem Login kopieren

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 = '?|';
Nach dem Login kopieren

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

oprname  function
----------------------------------------------------------------------------------
?|       jsonb_exists_any(jsonb, text[])
Nach dem Login kopieren

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()) {
     ...
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage