Escaping hstore enthält Operatoren in einer JDBC Prepared-Anweisung

8

Ich verwende PostgreSQL 9.1.4 mit hstore und dem PostgreSQL JDBC -Treiber (9.1-901.jdbc4).

Ich versuche, die contains-Operatoren ( ? , ?& , ?| ) in einem PreparedStatement zu verwenden, aber das ? -Zeichen wird als variabler Platzhalter geparst. Kann dieses Zeichen maskiert werden, um den richtigen Operator in der Abfrage zu senden?

Ein Beispiel:

%Vor%

In diesem Formular würde das folgende Beispiel eine Ausnahme auslösen:

%Vor%

Aktualisierung:

Nach der Untersuchung des Abfrageparsers im pgjdbc-Treiber dieses Snippet scheint anzuzeigen, dass das ? -Zeichen nicht entfernt werden kann. Die verbleibenden Fragen sind:

  • Gibt es irgendwas in der JDBC-Spezifikation, das es einem ? erlaubt, maskiert zu werden und etwas anderes als ein Parameter-Platzhalter zu sein?
  • Gibt es eine bessere Lösung für dieses Problem als nur einfache Anweisungen mit Variablen, die manuell in die Abfragezeichenfolge eingefügt werden?
Sam Macbeth 13.08.2012, 18:45
quelle

3 Antworten

5

Es sieht so aus, als ob der Java-SQL-Parser nicht Hstore-kompatibel ist.

Aber da die Syntax c ? 'foo' äquivalent zu exist(c, 'foo') ist, können Sie dieses Problem leicht umgehen. Sehen Sie sich die folgende Seite an, um zu sehen, was die ausführlichen Operatoren für hstore sind.

Postgres hstore-Dokumentation

    
aymeric 14.08.2012, 18:20
quelle
2

Es gibt eine Diskussion über dieses Problem auf der Pgsql-Hacker-Mailingliste: Ссылка

Für jetzt mag ich am meisten diese Problemumgehung, die auch Indizes unterstützt:

%Vor%     
Martin Ždila 01.09.2013 17:56
quelle
-1

Wenn Sie mit PreparedStatement mehrere Schlüssel / Wert-Paare hinzufügen möchten, können Sie Folgendes tun:

%Vor%

Dies wird einfügen: 23456, 'name=>Duke, city=>Valley'

    
Ashwin Jayaprakash 06.02.2013 00:06
quelle

Tags und Links