2012-10-08 10 views
5

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をハードコードされた使用しました。 – anon58192932

2

列のインデックスは1から始まります。したがって、可変ポインティング列の変数を1ずつ増やしてください。

関連する問題