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)
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
Sie können die ResultSetMetaData verwenden, um die Spalten zu kennen, die in einer bestimmten Ergebnismenge zusammen mit ihrem Datentyp vorhanden sind. – Vikdor
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