Oracle 10g データベースに接続するために、Oracle の JDBC シン ドライバ (10.2.0.3) を使用しています。データベースの列に関する情報を取得したいので、ResultSetMetaDataを使用します。必要な最も重要な情報は列の型と長さなので、getColumnType、getPrecision、およびgetScaleメソッドを使用します。
select * from tablenameのように列タイプが「単純」である場合、単純なクエリ ( ) で機能しますVARCHAR2(50), NUMBER(5), NUMBER(6,2)。より複雑なクエリ ( select count(*) from tablename) または複雑な計算を含むビューに基づくクエリがある場合、メソッドは次のような奇妙な結果を返します。
getScale: -127getPrecisionとgetScale0の両方getPrecision: -1
oracle.jdbc.J2EE13Compliant接続プロパティを(いくつかの Web ページで提案されているように) に設定すると、 truegetScale=-127 はなくなりますが、それでも 0/0 の結果が返されます。
ほとんどの場合、これらの奇妙な結果に対する回避策を作成する必要がありますが、その前に、少なくとも Oracle の ResultSetMetaData の動作に関する包括的なドキュメントが必要です。たとえば、すべての SQL タイプに対して getPrecision/getScale の意味を持つ巨大なテーブルは素晴らしいでしょう。このようなドキュメントはどこかにありますか?