gpt4 book ai didi

java - BeanPropertySqlParameterSource 和 double

转载 作者:行者123 更新时间:2023-11-30 05:16:29 26 4
gpt4 key购买 nike

在 Sybase 中设置一个表和存储过程,如下所示:

创建表testtab(f float)

创建 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 传递到存储过程,并截断小数。

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

最佳答案

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

关于java - BeanPropertySqlParameterSource 和 double ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/934847/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com