BeanPropertySqlParameterSource

BeanPropertySqlParameterSource

在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的实例,以使其起作用。

09-10 17:03