Точность БД дополняется случайными числами с использованием Spring JdbcTemplate - PullRequest
1 голос
/ 21 февраля 2011

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

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

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

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

где jt - это момент SimpleJdbcTemplate.

БД - это Oracle.

Спасибо.

1 Ответ

2 голосов
/ 22 февраля 2011

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

Рассмотрим оператор SQL INSERT INTO table (field) VALUES (-0.11111111) с field тип Oracle NUMBER и -0.11111111 типа float.

С прямым JDBC он дает значение field как есть,т.е. -0.11111111.

Но в Spring 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...