2014-04-17 4 views
0

테이블에서 일부 Java Double 값을 삽입하려고합니다 (SQL Server를 사용 중입니다). Liquibase를 사용하여 앞서 언급 한 테이블을 어떻게 만들 수 있습니까? 더 정확히 말하면, 어떤 유형이 열이어야합니까? 아래의 시도가 작동하지 않습니다. 외관상으로는 부유물은 충분히 정확하지 않습니다.Java double to SQL Server 데이터 형식

<column name="visitsAvg" type="FLOAT"/> 
+1

어떻게 작동하지 않습니까? 오류가 있습니까? 그렇다면 무엇입니까? 그렇지 않다면 어떻게 작동하지 않습니까? 'DOUBLE'유형을 사용해 보셨습니까? –

+0

@MarkRotteveel 스프링 배치 (Batch)를 사용 중이고 '예외 값이 데이터 타입 float의 유효한 인스턴스가 아닙니다. 소스 데이터에서 유효하지 않은 값을 확인하십시오. 유효하지 않은 값의 예는 정밀도보다 큰 스케일을 갖는 숫자 유형의 데이터입니다. ' – Dragos

답변

0

문제는 번호 대신 NaN이 있다는 것이 었습니다. 좀 더 정확하게, 내 코드의 어느 시점에서 0으로 나눈 값이 나왔습니다. 따라서 Java Double을 일부 SQL 형식으로 변환하거나 Liquibase로 변환하지 않는 것이 문제였습니다. 나는 그 문제가 어딘가에 있을지도 모른다고 잘못 가정했다.

1

Liquibase는 JDBC 유형을 열에 사용합니다. JDBC/SQL 유형 FLOAT은 SQL Server 유형 FLOAT과 동일하지 않습니다. JDBC 유형 FLOAT은 32 비트 단 정밀도 부동 소수점입니다. 64 비트 배정 밀도 (SQL Server에 FLOAT(53))를 원하면 DOUBLE을 지정해야합니다.

가능성이 높은 liquibase는 type="FLOAT"에 대한 요청을 SQL 서버에 FLOAT(24) 유형의 열로 변환합니다. 이는 완전한 정확도로 Java double을 저장하기에 충분하지 않습니다.

+0

DOUBLE을 지정했지만 여전히 동일한 문제점이 있습니다. 심지어 java.sql.Types.DOUBLE 시도했지만 개선 없음. 다른 제안? – Dragos

+0

@Dragos 난 당신이 SQL 서버에서 오류 및 실제 테이블 정의를 트리거하는 몇 가지 실제 코드를 보여줄 필요가 있다고 생각 –