0

Java アプリケーションで、Oracle データベースから数値を選択します。選択した値のコンマまでの桁数を知る必要があるため、クラスのgetScale()メソッドを使用しました。このアプローチは、ステートメントResultSetMetaDataで min、max... などの集計関数を使用しない限り、正常に機能します。selectmin または max を使用するとgetScale()0 が返されます。 は、列の値とColumnType同じままです。(NUMERIC)

理由は何ですか?また、あまり厄介ではない回避策をまだ探しています。

を使用しております:oci driver, Java 6, Oracle 10g

4

1 に答える 1

1

一般に、どのような表現もスケールは不明です。たとえばAVG、数値列のは、列の元のスケールに依存することはできません。それに対処するのはクライアント次第です。SUM実際の値がない限り、どのようにしての精度を知ることができますか?RTRIM同様に、 orREPLACE関数を通過した後に返される文字列の長さはどれくらいですか?結果セット全体の実際の値を確認するまで、知る方法はありません。

おそらくSQL自体で、適切なスケールが何であるかを知ることができます。この質問はcast、適切なタイプにを使用することを提案します。

ResultSetMetaDatagetScaleは0を返します

あなたの場合、あなたはとについて尋ねていminますmax。これらは、カラムのスケールと精度を維持するという点で特別です。ドライバーにはないかもしれませんが、論理的に言えばそうです。スケールを知る必要がある場合は、メソッドを使用して、結果セットのメタデータではなく、列自体のメタデータを確認できますjava.sql.DatabaseMetadata

于 2012-07-20T03:56:57.833 に答える