PostgreSQL - ERREUR: l’opérateur n’existe pas: smallint = caractère variable (Solution)

PostgreSQL - ERREUR: l'opérateur n'existe pas: smallint = caractère variant (Solution)

Aujourd'hui, j'ai rencontré une erreur étrange.En fait, mon entreprise prévoit de migrer l'application Web j2ee existante de PostgreSQL 8.2 vers la dernière PostgreSQL 8.3. Mais après avoir configuré correctement PostgreSQL 8.3 et lancé l'application Web, je continue à frapper l'erreur suivante
**

org.postgresql.util.PSQLException: ERROR: operator does not exist: smallint = character varying

Cela ressemble à une erreur de non-concordance du type de données, c'est drôle ça fonctionne bien avec PostgreSQL 8.2 mais PostgreSQL 8.3? Je recherche quelques heures sur Google et je découvre que cela a probablement à voir avec les modifications apportées à la diffusion implicite en 8.3. Il semble que PostgreSQL 8.3 ait déployé beaucoup d'efforts pour améliorer et vérifier le type de données.

Cela entraînera de nombreux effets secondaires, car nous définissons une chaîne dans valuelist pour comparer toutes les colonnes, et laissons PostgreSQL faire le casting automatiquement.
Ce n'est plus supporté dans PostgreSQL 8.3 (je suppose). Ici, je fournis deux solutions pour résoudre l'erreur ci-dessus.

Solution
—————
1) use setInt or setLong to cast to the appropriate data type before send statement to PostgreSQL

2) utiliser un casting explicite comme :: smallint

par exemple

**

select * from score where scordid =?::smallint

Si vous utilisez valuelist comme moi, vous devez encapsuler statementBuilder pour remplacer StandardStatamentBuilder par votre type de données approprié.


J'espère travailler pour vous.