2011-02-21 6 views
1

私はSpringのJdbcTemplateを使用して挿入SQL文を実行します。私が挿入したいフィールドはNUMBERです。値はfloat-0.11111111です。しかし、DBに挿入した後、私が得る値は乱数-0.1111111119389534で埋められます。DB精度にSpring JdbcTemplateを使用して乱数が埋め込まれています

ダイレクトJDBCを使用すると、値はそのまま埋め込まれます。

私は同じ結果を与えるINSERTステートメントのパラメーターを設定するのにBeanPropertySqlParameterSourceMapSqlParameterSourceを使用します。 JTはSimpleJdbcTemplateの瞬間である

BeanPropertySqlParameterSource params = new BeanPropertySqlParameterSource(stat); 
int n = jt.update(query, params); 

:コードは次のようになります。

DBは、Oracleです。

ありがとうございます。

+0

を読みますか? –

答えて

2

Javaのfloatデータ型の場合、Spring JDBCは直接JDBCとは動作が異なります。

INSERT INTO table (field) VALUES (-0.11111111)fieldとし、OracleタイプNUMBERと-0.11111111をfloat型とします。

直接JDBCでは、fieldの値をそのまま返します。つまり、-0.11111111です。

しかし、春のJDBC(JdbcTemplate.update()を使用して、それがfieldの値が-0.1111111119389534すなわち、数字で埋め与えます。

んが、このような違いは、Java型doubleのために発生しません。挿入された値が数字で埋められていない。

Javaデータ型BigDecimalで、DBに挿入された値も、すなわち、数字でパディングされ-0.1111111099999999990428634077943570446223、これは直接JDBCとSpring JDBCの両方のために一貫しているが。

の結果Javaは「(フロート)データ型は、通貨など、正確な値に使用すべきではありません。」という行動は、直接JDBCや春のJDBCで異なっている本家のように、その文書で述べてfloatが、理解しやすいです、我々はそれが間違っていると言うことはできません。 BigDecimalについては

は、私が使用中の春のJDBCのバージョンを知っている可能性がありhttp://download.oracle.com/javase/6/docs/api/java/math/BigDecimal.html#BigDecimal%28double%29

+0

私はhttp://stackoverflow.com/questions/5074735/bigdecimal-variable-padded-with-random-numbers-in-jdbc-insertでのBigDecimalの問題については、別の質問を –

関連する問題