2012-10-08 32 views
5

我試圖編寫一個JTable,它從一個ResultSet中獲取數據,並使用它來創建一個動態大小的表,其中包含來自ResultSet的適當列名和行數據值但我無法讓JDBC動態獲取我的列名。簡單的getColumnName(0)調用拋出無效的列索引: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,因爲我試圖找到bug的起源。 – anon58192932

2

列索引由1開始。因此,將變量指針列變量增加1.

相關問題