개요
JAVA에서 티베로(Tibero)에 데이터 입력하는 도중 "JDBC-90609: Invalid column index"가 발생했습니다. 원인을 찾는데 하루를 소비했다. 나와 같은 삽질을 하지 않도록 하기 위해 정리해 봤습니다.
원인
테이블의 컬럼 개수와 입력하려는 값 개수가 틀려서 발생한 문제입니다. 동적으로 매칭을 하다 이름에 오타가 있어 다른 컬럼으로 인식하여 칼럼이 하나 모자라게 된 것입니다. 오타로 인해 발생한 문제입니다.
반응형
예방 방법
1. SQL 쿼리에 문제가 있는지 확인하세요. 컬럼 이름이나 인덱스를 정확히 입력했는지 확인하고, 쿼리 실행 전에 테스트해 보세요
2. SQL 쿼리에서 사용하는 컬럼 인덱스가 실제 데이터베이스 테이블의 컬럼 인덱스와 일치하는지 확인합니다. 특히, 1부터 시작하는 인덱스를 사용하는지 확인하세요. Java에서는 컬럼 인덱스가 1부터 시작합니다.
ResultSet rs = statement.executeQuery("SELECT column1, column2 FROM your_table");
while (rs.next()) {
int value1 = rs.getInt(1); // 올바른 컬럼 인덱스 사용
// ...
}
3. 가능하면 컬럼 이름을 사용하여 데이터를 가져오는 것이 좋습니다. 이렇게 하면 컬럼의 순서를 고려하지 않아도 되므로 유지보수가 쉬워집니다.
ResultSet rs = statement.executeQuery("SELECT column1, column2 FROM your_table");
while (rs.next()) {
int value1 = rs.getInt("column1"); // 컬럼 이름 사용
// ...
}
반응형
4.ResultSet의 메타데이터를 사용하여 결과 집합의 구조를 확인할 수 있습니다. 이를 통해 어떤 컬럼이 포함되어 있는지 확인할 수 있습니다.
ResultSetMetaData metaData = rs.getMetaData();
int columnCount = metaData.getColumnCount();
for (int i = 1; i <= columnCount; i++) {
String columnName = metaData.getColumnName(i);
System.out.println("Column Name: " + columnName);
}
위 방법으로 원인 파악 및 해결이 되지 았았으면 전단계에서 발생한 오류로 인해 문제가 생긴 것일 수도 있습니다. 지름길은 없습니다. 명령 시작부터 천천히 살펴보다 보면 찾게 될 것입니다.
반응형
'IT > 자바' 카테고리의 다른 글
Lombok(롬복) 라이브러리의 모든 것 (0) | 2024.08.08 |
---|---|
[자바] File 클래스 renameTo() 사용 예제 (0) | 2024.01.15 |
[Java] 랜덤함수 math.random Random 비교 (java vs jsp) (0) | 2023.11.01 |
[JAVA] 문자 to Double 형 변환 (0) | 2023.10.18 |
[JAVA] MultiData for문 사용시 데이터 추출 방법 (0) | 2023.10.18 |