PostgreSQL - ERROR: Operator existiert nicht: smallint = Zeichenänderung (Lösung)

PostgreSQL - FEHLER: Operator existiert nicht: smallint = Zeichen variiert (Lösung)

Heute bin ich auf einen seltsamen Fehler gestoßen. Mein Unternehmen plant, eine vorhandene j2ee-Webanwendung von PostgreSQL 8.2 auf die neueste Version von PostgreSQL 8.3 zu migrieren. Aber nachdem ich PostgreSQL 8.3 richtig eingerichtet und die Webanwendung gestartet habe, klicke ich weiter nach dem Fehler
**

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

Es scheint ein Datentypfehlanpassungsfehler zu sein. Ist es komisch, dass es bei PostgreSQL 8.2 und PostgreSQL 8.3 einwandfrei funktioniert? Ich google ein paar Stunden und finde heraus, dass es wahrscheinlich mit den Änderungen an implizitem Casting in 8.3 zu tun hat. Es scheint, dass PostgreSQL 8.3 große Anstrengungen unternimmt, um den Datentyp zu verbessern und zu überprüfen.

Dies wird viele Nebeneffekte delibrieren, da wir in der Werteliste einen String setzen, um alle Coloums zu vergleichen, und PostgreSQL das Casting automatisch durchführen lassen.
Dies wird in PostgreSQL 8.3 nicht mehr unterstützt (ich denke). Hier biete ich zwei Lösungen an, um den obigen Fehler zu lösen.

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

2) Verwenden Sie explizites Casting wie :: smallint

beispielsweise

**

select * from score where scordid =?::smallint

Wenn Sie valuelist wie mich verwenden, müssen Sie statementBuilder umbrechen, um StandardStatamentBuilder mit dem entsprechenden Datentyp zu überschreiben.


Hoffe Arbeit für dich.