2011-02-21 2 views
1

Я использую Spring JdbcTemplate для запуска инструкции вставки SQL. Поле, в которое я хочу вставить, - это NUMBER. Значение: -0.11111111 типа float. Однако после ввода в БД значение, которое я получаю, заполняется случайными числами -0.1111111119389534.DB прецизионно заполнен со случайными числами, используя Spring JdbcTemplate

Обратите внимание, что когда я использую прямой JDBC, значение вставляется как есть, без заполненных номеров.

Я использую BeanPropertySqlParameterSource и MapSqlParameterSource для установки параметров инструкции INSERT, обе дают одинаковые результаты. Код выглядит следующим образом:

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

где JT является мгновение SimpleJdbcTemplate.

БД - это Oracle.

спасибо.

+0

Могу ли я узнать, какую версию Spring JDBC в использовании? –

ответ

2

Для типа данных Java float Spring JDBC ведет себя иначе, чем прямой JDBC.

Сводка SQL 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, вставленное значение в БД также будет дополнен с номерами, т.е. -0,1111111099999999990428634077943570446223 и это согласуется как для прямого JDBC и Spring JDBC.

результаты float понятен, поскольку в своей документации Java заявляет, что тип данных «(Float) никогда не должен использоваться для точных значений, таких как валюта». Поэтому, хотя поведение в JDBC и Spring JDBC отличается от других, мы не можем сказать, что это неправильно ,

Для BigDecimal, читайте http://download.oracle.com/javase/6/docs/api/java/math/BigDecimal.html#BigDecimal%28double%29

+0

Я задал еще один вопрос о проблеме BigDecimal на странице http://stackoverflow.com/questions/5074735/bigdecimal-variable-padded-with-random-numbers-in-jdbc-insert –