2009-06-01 8 views
1

テーブルとSybaseでSPROCを設定している:BeanPropertySqlParameterSourceとダブルス

テーブルTESTTAB(Fフロート)を作成

挿入TESTTAB値(@f)

として浮遊@fのproc insert_testtabを作成しますそして、ダブル

class TestObj { Double getF() { return 12.34; } } 

使用SimpleJdbcCall & BeanPropertySqlParameterSourceを保持しているJavaオブジェクト:

SqlParameterSource params = new BeanPropertySqlParameterSource(new TestObj()); 
SimpleJdbcCall call = new SimpleJdbcCall(dataSource).withProcedureName("insert_testtab"); 
call.execute(params); 

12.34ではなく、12.0がデータベースに挿入されます。これは、カバーの下にBeanPropertySqlParameterSourceがjava.sql.Types.NUMERICとしてsprocに番号を渡しているように見え、小数点のplaseを切り捨てています。

誰もがこれを説明するのを助けることができますか、これはおそらく春のSybaseコードで問題になっているのでしょうか、あるいは私は間違って何かをやっていますか?

+0

Sybaseのカラムが正しく設定されていますか?私は数値列が整数(または精度0)のためだけに設定されているときに他のDBでこれを見たことがあります – Gandalf

答えて

2

プロパティの型をBeanPropertySqlParamterSourceオブジェクトに登録することをお勧めします。それ以外の場合、Springは基本となるCallableStatementでsetObjectを使用します。これにより、データがどのように扱われるかを決定するために、JDBCドライバの実装まですべてが委ねられます。 params.registerSqlType("f", java.sql.Types.DECIMAL)のような何かがそのトリックをするべきです。これを行うには、paramsをBeanPropertySqlParameterSourceのインスタンスとして宣言する必要もあります。

+0

ありがとう、私はそれを試してみましょう、BeanPropertySqlParameterSourceが提供されていないので、パラメータ名と型?これは私のバグだと思われる。 –

+0

私はあまりにも思っていましたが、setObjectへの呼び出しをうまく処理しないJDBCドライバを使用しています。あなたが使用している特定のJDBCドライバが、それが確実にバグであるかどうかを知るためにDoubleをどのように扱うかを見なければなりません。 – laz

関連する問題