PostgreSQL - ERROR:演算子が存在しません:smallint =文字の可変(解決策)

PostgreSQL –エラー:演算子が存在しません:smallint =文字可変(解決策)

今日、奇妙なエラーが発生しました。実際、私の会社は、既存のj2ee WebアプリケーションをPostgreSQL 8.2から最新のPostgreSQL 8.3に移行する予定です。 しかし、PostgreSQL 8.3を適切にセットアップし、Webアプリケーションを起動した後、次のエラーが発生し続けます
**

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

データ型の不一致エラーのように見えますが、面白いのはPostgreSQL 8.2でうまく機能しているのにPostgreSQL 8.3ですか? 数時間グーグルで調べてみると、それはおそらく8.3で行われた暗黙のキャストへの変更に関係しているのでしょう。 PostgreSQL 8.3はデータ型の強化とチェックに多大な努力を払っているようです。

値リストに文字列を設定して列を比較し、PostgreSQLに自動的にキャストを実行させるため、これは多くの副作用を検討します。
これはPostgreSQL 8.3ではサポートされなくなりました(おそらく)。 ここで、上記のエラーを解決する2つのソリューションを提供します。

ソリューション
—————
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を適切なデータ型にオーバーライドする必要があります。


あなたに仕事を願っています。