在Sybase中具有一个表和一个proc设置,如下所示:
创建表testtab(f浮动)
创建proc insert_testtab @f float作为插入testtab值(@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代码有问题,还是我做错了什么?
最佳答案
最好的办法是向BeanPropertySqlParamterSource对象注册属性的类型。否则,Spring在基础CallableStatement上使用setObject。这一切都由JDBC驱动程序实现来决定如何处理数据。诸如params.registerSqlType("f", java.sql.Types.DECIMAL)
之类的东西应该可以解决问题。您还需要将params声明为BeanPropertySqlParameterSource
的实例,以使其起作用。