1

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

创建表 testtab (f float)

create 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 代码的问题,还是我做错了什么?

4

1 回答 1

2

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

于 2009-06-01T17:00:52.360 回答