Java 6で正しく動作し、Java 8でコンパイルされて実行されるJavaコードで奇妙なエラーが発生すると、SQLException:Invalid column index "Java 8:NUMBER(x、0)の値を持つResultset.getBigDecimalエラー
私のテーブルのSQL値は、タイプがNUMBER(2,0)
であり、実際にはそれがうまく理解できれば整数値です。
コードは次のとおりです。
BigDecimal idPointHoraire = oResultset.getBigDecimal("ID_POINT_HORAIRE");
値が実際の整数であるように、ここで私は、コードを修正する方法である:
BigDecimal idPointHoraire = new BigDecimal(oResultset.getInt("ID_POINT_HORAIRE"));
質問は次のとおりです。
- なぜこれをJava 6で正しく動作していたJava 8の動作
- 「列インデックスが無効です」という例外は、列を名前で取得すると、なぜですか?
オラクルの「NUMBER」タイプは、[documentation](https://docs.oracle.com/cd/B19306_01/java.102/b14188/datamap.htm)に従ってJavaの「BigDecimal」にマップされます。 –
APIまたはJDBCドライバが過去数年間に変更された可能性があります。 'ID_POINT_HORAIRE'カラムをintとして扱うことは、私が見たものに基づいて正しくないように見えるかもしれませんが、以前のバージョンではそれを取り除いていた可能性があります。 –
JREはインタフェースのみを提供するため、JREの更新は特定のJDBCドライバの実際のResultSet実装の動作に影響を与えません。特定のドライバベンダーがAPIをどのように解釈するかを学ぶことは、Java 6より前であっても常に楽しいものでした。 – Holger