2012-04-23 4 views
2

테이블을 생성하고 해당 테이블에 데이터를 삽입하려고합니다. 테이블은 복잡한 관계가있는 데이터에서 작성됩니다. 우리는 이것을 만들어 BI 도구 사용자가 데이터를 쉽게 다룰 수 있도록했습니다.PreparedStatement throwing 인덱스가 범위를 벗어 났을 때 범위를 벗어났습니다.

생성 된 이러한 테이블은 각각 ​​사용자 생성 데이터에 따라 다르다. 하나의 경우 우리는 범위를 벗어나는 인덱스를 얻고있다. 메타 데이터를 검사 할 때 범위를 벗어나지 않습니다.

정확한 예외 메시지는 다음과 같습니다

com.microsoft.sqlserver.jdbc.SQLServerException: The index 13 is out of range.

생성 된 삽입 문은 다음과 같습니다

목격 한 사고의 값이 예외를 설정
INSERT INTO [F22_AF] ([frcId],[eId],[aId],[dateCreated],[DateofThing],[Wasthisaninjury],[Whowainjured],[WhowainjuredFNAME],[WhowainjuredLNAME],[Whatwasinvolved],[WhatwasinvolvedDATA],[WhatOptionsWereAvailable],[AccidentWitnessed]) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?) 

가 발생합니다. 값을 설정하려고 할 때 나는 열 인덱스와 값을 인쇄 :

13 : AccidentWitnessed = 거짓

그것이 내가 삽입 문에서 메타 데이터를 인쇄이있어 실패

: - 유형 ||

parameterMetaData.getParameterCount()는 13

ColIndex을 = 클래스

1 - int || java.lang.Integer

2 - int || java.lang.Integer

3 - int || java.lang.Integer

4 - datetime || java.sql.Timestamp

5 - datetime || java.sql.Timestamp

6 - nvarchar || java.lang.String

7 - int || java.lang.Integer

8 - nvarchar || java.lang.String

9 - nvarchar || java.lang.String

10 - int || java.lang.Integer

11 - nvarchar || java.lang.String

12 - int || java.lang.Integer

13 비트 || java.lang.Boolean

col 인덱스 13을 설정하려고하면 인덱스가 범위를 벗어나지 만 메타 데이터에 따르면! 그것이 존재하지 않는다면 다른 예외 범위를 벗어날 것이다.

동일한 코드가 다른 데이터 집합에서 작동합니다.

누구든지 열 색인이 존재할 때이 오류가 발생하는 이유를 설명 할 수 있습니까?

+1

0부터 시작한 인덱스를 사용해 보셨습니까? 그리고 그것이 아니라면, 당신이 문장을 만들고 실행하기 위해 사용하는 정확한 코드를 게시해야합니다. –

+0

@MarkoTopolnik Java의'PreparedStatement'에있는 인덱스는 1 기반이므로 문제의 원인이 될 것이라고 기대하지는 않습니다. – Jesper

+0

@Jesper 코드가 없으면 정확히 무슨 일이 일어나는 것인지 추측 할 수 있습니다. 간헐적 인 코드가 1- 기반에서 0- 기반으로 변환되거나 신이 다른 것을 알고있을 수 있습니다. –

답변

1

내 충고는? JVM을 믿으십시오. 당신이 생각하는 것은 중요하지 않습니다.

잘못된 점을 이해하는 데 올바른 위치를 찾고 있지 않습니다. 작은 독립적 인 예제를 작성하고 디버거에서 실행하십시오. 이렇게 코드가 잘못되어있는 곳을 볼 수 있습니다.

+0

코드 오류 - Prepared Statement 객체가 잘못된 setBoolean을 호출했습니다. – Allan

0

Hibernate을 사용했을 때도 같은 오류가 발생했습니다. 그러나 예외는 최대 절전 모드에 달려 있지 않습니다. 이 예외는 JDBC 또는 Database 버전에 의존합니다. 광산 데이터베이스는 오라클이며 동일한 예외가 있습니다. 이유는 내가 사용한 ojdbc 버그였습니다. Prepared Statement에서 7 개 이상의 매개 변수를 전달하면 예외가 발생했습니다. 이것은 버그입니다. 해결책은 ojdbc입니다.

관련 문제