BeanPropertySqlParameterSource and Doubles - PullRequest
1 голос
/ 01 июня 2009

Иметь таблицу и настройки sproc в Sybase следующим образом:

создать таблицу testtab (f float)

создать proc insert_testtab @f float в качестве значений вставки testtab (@f)

И Java-объект, который содержит Double

class TestObj { Double getF() { return 12.34; } }

Использование SimpleJdbcCall & BeanPropertySqlParameterSource:

SqlParameterSource params = new BeanPropertySqlParameterSource(new TestObj());
SimpleJdbcCall call = new SimpleJdbcCall(dataSource).withProcedureName("insert_testtab");
call.execute(params);

В результате в базу данных вставляется 12.0, а не 12.34. Похоже, что под крышками BeanPropertySqlParameterSource передает номер sproc как java.sql.Types.NUMERIC и усекает десятичные дроби.

Может кто-нибудь помочь объяснить это, возможно, это проблема с кодом Sybase в Spring, или, возможно, я что-то делаю неправильно?

1 Ответ

2 голосов
/ 01 июня 2009

Лучше всего зарегистрировать тип свойства с помощью объекта BeanPropertySqlParamterSource. В противном случае Spring использует setObject в базовом CallableStatement. Это оставляет все дело за реализацией драйвера JDBC, чтобы решить, как данные обрабатываются. Что-то вроде params.registerSqlType("f", java.sql.Types.DECIMAL) должно сработать. Вам также нужно объявить params как экземпляр BeanPropertySqlParameterSource, чтобы это работало.

...