1

次のように、Sybase にテーブルと sproc を設定します。

create table 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.34 ではなく、12.0 がデータベースに挿入されます。カバーの下では、BeanPropertySqlParameterSource が数値を sproc に java.sql.Types.NUMERIC として渡し、小数点以下を切り捨てているようです。

これはおそらく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 に答える