2012-10-08 3 views
5

ResultSet에서 데이터를 가져와 ResultSet에서 적절한 열 이름과 행 데이터 값을 가진 동적 크기의 테이블을 만드는 JTable을 작성하려고합니다. 하지만 JDBC를 가져와 열 이름을 동적으로 가져올 수는 없습니다.간단한 getColumnName (0) 호출 throws 잘못된 열 인덱스 : getValidColumnIndex

내 선택 진술이 좋다는 것을 알고 있습니다! 필자가 작성한 ResultPrinter 클래스를 사용하여 결과를 쉽게 인쇄 할 수 있지만 어떤 이유로 든 열 이름을 가져올 수 없습니다.

코드 : http://pastebin.com/SSNdCkNu

출력 :

Connected to DB! 
SNUM, SNAME, STATUS, CITY, SUPPLIERS_ID_SEQ // printed by static Suppliers class 
Columns: 5 // result set shows there are 5 valid columns as expected 
Exception in thread "main" java.sql.SQLException: Invalid column index: getValidColumnIndex 
at oracle.jdbc.driver.OracleResultSetMetaData.getValidColumnIndex(OracleResultSetMetaData.java:138) 
at oracle.jdbc.driver.OracleResultSetMetaData.getColumnName(OracleResultSetMetaData.java:306) 
at Main.main(Main.java:15) 

답변

13

JDBC 컬럼 인덱스는 1부터 시작되지 0은 가능한 한 힘들 의존성을 피하기 컬럼 이름을 사용하여 데이터를 검색하는 것이 좋다 결과의 열 순서대로 정렬합니다.

+0

와우는 꽤 우스 꽝입니다. 아니면 오류가 너무 간단하기 때문에 나는 단지 당황스러워합니다. 어느 쪽이든 프로그램 적으로 열의 수를 얻은 다음 그 이름을 얻는 것이 좋은 방법이라고 생각했습니다. 사용자가 모든 열을 사용하지 않는 select 문을 수행하는 경우 선택한 열의 이름을 알 수있는 방법이 없기 때문입니다. – anon58192932

+1

ResultSetMetaData를 사용하여 해당 결과 집합에있는 열과 해당 데이터 형식을 알 수 있습니다. – Vikdor

+0

예 그게 내가하고있는 일이야. 나는 버그의 기원을 찾으려고했기 때문에 단순화를 위해 하드 코딩 된 0을 사용했다. – anon58192932

2

열 색인이 1부터 시작됩니다. 따라서 변수 지정 열 변수를 1 씩 늘리십시오.

관련 문제