BeanPropertySqlParameterSource和Doubles

时间:2009-06-01 13:35:48

标签: java spring sybase

在Sybase中有一个表和一个sproc设置,如下所示:

创建表testtab(f float)

create proc insert_testtab @f float as insert testtab values(@f)

一个包含Double的java对象

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将数字作为java.sql.Types.NUMERIC传递给sproc并截断小数点。

任何人都可以帮忙解释一下,这可能是Spring中的Sybase代码问题,还是我做错了什么?

1 个答案:

答案 0 :(得分:2)

最好的方法是使用BeanPropertySqlParamterSource对象注册属性的类型。否则,Spring在底层的CallableStatement上使用setObject。这使得所有由JDBC驱动程序实现决定如何处理数据。像params.registerSqlType("f", java.sql.Types.DECIMAL)这样的东西应该可以解决问题。您还需要将params声明为BeanPropertySqlParameterSource的实例才能使其正常工作。