Экранирование hstore содержит операторы в подготовленном операторе JDBC

Я использую PostgreSQL 9.1.4 с hstore и драйвер PostgreSQL JDBC (9.1 -901.jdbc4 ).

Я пытаюсь использовать операторы contains(?, ?&,?|)в PreparedStatement, однако символ ?анализируется как переменная-заполнитель. Можно ли экранировать этот символ, чтобы отправить правильный оператор в запросе?

Пример:

PreparedStatement stmt = conn.prepareStatement("SELECT a, b FROM table1 WHERE c ? 'foo' AND d = ?");
stmt.setInt(1, dValue);
stmt.executeQuery();

В этой форме следующий пример вызовет исключение:

org.postgresql.util.PSQLException: No value specified for parameter 2.

Обновление:

После изучения синтаксического анализатора запросов в драйвере pgjdbc этот фрагмент , по-видимому, указывает на невозможность экранирования символа ?. Остаются вопросы:

  • Есть ли что-нибудь в спецификации JDBC, которое позволяет экранировать ?и быть чем-то другим, кроме заполнителя параметра?
  • Есть ли лучший способ обойти эту проблему, чем просто использовать простые операторы с переменными, вручную вставленными в строку запроса?

8
задан Sam Macbeth 14 August 2012 в 13:47
поделиться