Как мне поместить параметр IN с LIKE с RowSet? - PullRequest
3 голосов
/ 29 января 2009

Я пытаюсь заставить параметр IN работать внутри оператора LIKE часами! Я использую CachedRowSet, который, как я понимаю, должен следовать тем же правилам, что и PreparedStatement.
Вот основной запрос:

CachedRowSet cache;
String sql = "SELECT x " +
                "FROM   Y " +
             "WHERE z LIKE '?__'" 

cache.setCommand(sql);
cache.setString(1, "someString");

someString - это известный идентификатор, но запись базы данных (кстати, PostgreSQL) имеет неизвестный суффикс из 2 символов.

1 Ответ

5 голосов
/ 29 января 2009

Заполнители параметров внутри кавычек игнорируются. Они интерпретируются как буквальное «?». Если вы используете параметр, вы должны поместить заполнитель вне кавычек в выражении SQL.

Но LIKE можно сравнить с любой строкой или любым выражением , которое создает строку. Например:

SELECT x FROM y WHERE z LIKE (? || '__')

Теперь вы можете указать «someString» для параметра, и тогда он будет объединен с константной строкой '__'.

...