古いバージョンの Eclipse (私の記憶が正しければ Ganymede) で開発された Java EE Web アプリケーションがあります。最近、Kubuntu 12.04 LTS に移行し、アプリケーションを Eclipse Kepler (Eclipse Web サイトからダウンロードしてインストールしたもの) に移行しました。Java Compliance Level 1.6 を使用しており、ターゲット コンテナーは Tomcat 6 です。
私の問題は、次のエラーが表示されることです。
org.postgresql.util.PSQLException: エラー: 演算子が存在しません: 整数 = 文字が異なります
アプリケーションが特定の Postgres クエリを含むページに遭遇したとき。JSTL sql:query および sql:param タグを使用して、jsp ページ内に準備済みステートメントを実装しています。これが悪い習慣と見なされることは承知していますが、私は元の作成者ではなく、この手法はアプリケーション全体で使用されています。
このエラーは、sql:param タグで文字列を整数に割り当てようとしたために発生します。以前のセットアップでは、キャストは透過的に行われ、エラーは発生しませんでした。新しいセットアップでは、エラーが発生します。
このエラーの原因となる Postgres 8.3 でより厳密な型キャストが導入されたことを読みましたが、アプリケーション内で Postgres 8.2 JDBC 4 jar ファイルを使用しているため、動作するはずです。私は困惑しています。おそらく誰かがアイデアを持っていますか?
比較を行う前に文字列に1を掛けるという回避策に出くわしました:
http://dev-answers.blogspot.co.uk/2010/08/type-coercion-in-jstl-for-sqlparam.html
しかし、これはちょっと面倒なので、変更するページがたくさんあります。しかし、とにかく問題を経験するべきではないので、それは学術的です.
読んでくれてありがとう。どんな助けでも大歓迎です。