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:
?
erlaubt, maskiert zu werden und etwas anderes als ein Parameter-Platzhalter zu sein? 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.
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%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'
Tags und Links postgresql jdbc hstore