PostgreSQL - ОШИБКА: оператор не существует: smallint = символ меняется (Решение)
Сегодня я столкнулся со странной ошибкой, фактически моя компания планирует перенести существующее веб-приложение j2ee из PostgreSQL 8.2 в последнюю версию PostgreSQL 8.3. Но после того, как я правильно настроил PostgreSQL 8.3 и запустил веб-приложение, я продолжаю получать следующую ошибку
**
org.postgresql.util.PSQLException: ERROR: operator does not exist: smallint = character varying
Это похоже на ошибку несоответствия типов данных, забавно ли это нормально работать в PostgreSQL 8.2, но PostgreSQL 8.3? Я погуглил несколько часов и выяснил, что это, вероятно, связано с изменениями неявного приведения, сделанными в 8.3. Кажется, что PostgreSQL 8.3 приложил много усилий для улучшения и проверки типа данных.
Это устранит множество побочных эффектов, потому что мы устанавливаем строку в valuelist для сравнения любых цветов и позволяем PostgreSQL выполнять преобразование автоматически.
Это больше не поддерживается в PostgreSQL 8.3 (я полагаю). Здесь я приведу два решения, чтобы решить вышеуказанную ошибку.
Раствор
—————
1) use setInt or setLong to cast to the appropriate data type before send statement to PostgreSQL
2) используйте явное приведение типа :: smallint
например
**
select * from score where scordid =?::smallint
Если вы используете valuelist, как я, вам нужно обернуть StatementBuilder, чтобы переопределить StandardStatamentBuilder для вашего соответствующего типа данных.
Надеюсь работа с вами.