У меня есть веб-приложение Java EE, разработанное в старой версии Eclipse (Ganymede, если я правильно помню). Недавно я перешел на Kubuntu 12.04 LTS и перенес приложение в Eclipse Kepler (которое я загрузил и установил с веб-сайта Eclipse). Он использует Java Уровень соответствия 1.6 и целевой контейнер Tomcat 6.ОШИБКА: оператора не существует: integer = символ меняется, используя Postgres 8.2
Моя проблема заключается в том, что теперь я получаю ошибку:
org.postgresql.util.PSQLException: ОШИБКА: оператор не существует: целое число = символ меняется
когда приложение встречает страницу с определенным запросом Postgres. Я использую JSTL sql: query и sql: param для реализации подготовленного оператора на странице jsp. Я знаю, что это считается плохой практикой, но я не автор оригинала, и этот метод используется во всем приложении.
Ошибка возникает из-за попытки присвоить строку целому числу в теге sql: param. В предыдущей настройке кастинг проходил прозрачно, и ошибки не было. С новой настройкой я получаю сообщение об ошибке.
Я прочитал, что более строгий тип кастинга был введен с Postgres 8.3, который мог бы вызвать эту ошибку, но я использую jar-файл Postgres 8.2 JDBC 4 в своем приложении, чтобы он работал. Я в тупике. Может, у кого-то есть идея?
я наткнулся на обходной путь, чтобы умножить строку на 1 перед выполнением сравнения:
http://dev-answers.blogspot.co.uk/2010/08/type-coercion-in-jstl-for-sqlparam.html
Но это немного ляп, и я бы много страниц для изменения. Но это академично, потому что я все равно не должен испытывать проблемы.
Спасибо за чтение. Любая помощь очень ценится.
Да, это произошло со мной прошлой ночью, что номер версии является то, что PostgreSQL на сервере, а не версии баночки. Мы используем 9.1.2. Ваше решение на месте, спасибо очень! – user2661243
Мне было интересно, почему это сработало раньше. Серверная версия PostgreSQL была такой же. Очень странно. – user2661243
@ user2661243 Я не мог объяснить это, если, возможно, ваш JSTL не вызвал параметры, которые раньше соответствовали типам, ожидаемым БД. Сравнение целого числа с текстом не должно работать без добавления в 8.3 или любой последующей версии сервера. –