2009-06-01 4 views
1

테이블과베이스의 SPROC 설정 유무 :BeanPropertySqlParameterSource 복식

테이블 testtab (F 로트)를 작성

삽입 testtab 값 (@f)

로 떠 @f PROC의 insert_testtab을 만들 그리고 두 번

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가 java.sql.Types.NUMERIC으로 sproc에 번호를 전달하는 것으로 나타나며 십진수 plase를 자릅니다.

아무에게도 설명 할 수 있습니까?이 문제는 아마도 Spring의 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

관련 문제