2012-10-08 5 views
5

Ich versuche, eine JTable zu schreiben, die die Daten aus einem ResultSet übernimmt und daraus eine dynamisch große Tabelle mit entsprechenden Spaltennamen und Zeilendatenwerten aus dem ResultSet erstellt aber ich kann JDBC nicht dazu bringen, die Spaltennamen für mich dynamisch zu bekommen.Einfacher getColumnName (0) Aufruf wirft ungültigen Spaltenindex: getValidColumnIndex

Ich weiß, meine Select-Anweisung ist gut! Ich kann die Ergebnisse leicht mit meiner ResultPrinter-Klasse drucken, die ich geschrieben habe, aber ich kann nicht scheinen, die Spaltennamen aus irgendeinem Grund zu bekommen.

Der Code: http://pastebin.com/SSNdCkNu

Der Ausgang:

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) 

Antwort

13

JDBC Spaltenindizes von 1 beginnen und nicht 0 Soweit möglich, ist es besser, Daten abzurufen Spaltennamen mit harter Abhängigkeit zu vermeiden in der Reihenfolge der Spalten in den Ergebnissen.

+0

Wow, das ist ziemlich lächerlich. Oder vielleicht bin ich nur beschämt, weil der Fehler so einfach war. Wie auch immer, ich dachte mir programmatisch die Anzahl der Spalten und dann ihren Namen zu bekommen war eine gute Methode? Wenn der Benutzer eine SELECT-Anweisung ausführt, die nicht alle Spalten verwendet, kann ich die Namen der ausgewählten Spalten nicht kennen. – anon58192932

+1

Sie können die ResultSetMetaData verwenden, um die Spalten zu kennen, die in einer bestimmten Ergebnismenge zusammen mit ihrem Datentyp vorhanden sind. – Vikdor

+0

Ja das ist, was ich tue :) Ich habe die hartcodierte 0 für die Einfachheit verwendet, weil ich den Ursprung des Bugs zu finden versuchte. – anon58192932

2

Spaltenindex beginnt mit 1. Also erhöhen Sie Ihre Variable zeigen Spalte Variable um 1.

Verwandte Themen