Запрос не работает с маркером параметра с readyStatement - PullRequest
1 голос
/ 23 июня 2009

Выдержка из кода

PreparedStatement preparedStatement =  connection.prepareStatement("SELECT * FROM sch.tab1 where col1 like lower ( 'ABZ' ) ");
preparedStatement.executeQuery();

Приведенный выше код успешно выполняется.

Но когда я пытаюсь выполнить это

PreparedStatement preparedStatement =  connection.prepareStatement("SELECT * FROM sch.tab1 where col1 like lower ( ? ) ");
preparedStatement.setString ( myValue );
preparedStatement.executeQuery();

Выдает исключение. " В СТОРОНЕ ПОДГОТОВКИ СОДЕРЖИТСЯ НЕПРАВИЛЬНОЕ ИСПОЛЬЗОВАНИЕ МАРКЕРОВ ПАРАМЕТРОВ "

В чем здесь проблема?


Ответ найден, см. Комментарии

Ответы [ 3 ]

4 голосов
/ 23 июня 2009

I подозреваю проблема в том, что вы не можете применять функции непосредственно к параметрам. Есть ли какая-то конкретная причина, по которой вы хотите, чтобы нижний регистр выполнялся в базе данных, а не в вашем коде? (Я могу вспомнить некоторые потенциальные причины, по общему признанию.) Если вам действительно не нужно это делать, я просто изменил бы SQL на:

SELECT * FROM sch.tab1 where col1 like ?

и вызовите toLower() на Java, предпочтительно указав соответствующий языковой стандарт для выполнения строчных букв.

3 голосов
/ 23 июня 2009

Я думаю, что Карлос что-то задумал. Попробуйте

SELECT * FROM sch.tab1 where col1 like lower ( '' + ? )

или что-то еще, для оператора конкатенации строк в вашей версии SQL. Форсирование строкового контекста может помочь вам избежать ошибки. Может потребоваться дополнительные скобки.

0 голосов
/ 21 октября 2013

Для справки: я столкнулся с той же проблемой при использовании функции NORMALIZE_STRING:

SELECT NORMALIZE_STRING(?, NFKD) FROM sysibm.sysdummy1

Сообщение об ошибке:

THE DATA TYPE, LENGTH, OR VALUE OF ARGUMENT 1 OF NORMALIZE_STRING IS INVALID. SQLCODE=-171, SQLSTATE=42815, DRIVER=4.13.111

Использование следующего утверждения решило проблему (CONCAT). Спасибо Павлу Черноху!

SELECT search_normalize(NORMALIZE_STRING(? CONCAT G'', NFKD)) FROM sysibm.sysdummy1

Обратите внимание на префикс «G» для совместимости с Юникодом.

...