Eigentlich ist es garnicht notwendig, die Anzahl der Zeilen zu ermitteln. Es langt so lange mit ResultSet.next() die Daten auszulesen bis keine mehr vorhanden sind.
Da ich (sorry) Durch Deinen Code langsam nicht mehr so ganz durchblicke, hab ich das ganze nochmal komplett neu geschrieben (mit MySQL als Datenbank).
Anstelle eines Object-Arrays habe ich Vectoren verwendet. Der Vorteil dabei ist, dass die Anzahl der Zeilen/Spalten vorher nicht feststehen muss und dass Du die Vektoren direkt an den Konstruktor von JTable übergeben kannst.
Das Programm funktioniert auch dann, wenn die Datenbankabfrage 0 Zeilen liefert.
Natürlich ist das Beispiel so nicht perfekt, für den täglichen Einsatz würde sich die Erstellung einer von JTable abgeleiteten Klasse empfehlen.
import javax.swing.*;
import java.sql.*;
import java.awt.event.*;
import java.util.*;
class TableTest extends JFrame
{
public TableTest() throws Exception
{
this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {System.exit(0);}
});
// MySQL-Treiber laden
Class.forName("org.gjt.mm.mysql.Driver").newInstance();
Connection con = DriverManager.getConnection("jdbc:mysql://hostname:3306/database?user=root&password=**************");
Statement abfrage = con.createStatement();
Vector Daten = new Vector();
Vector Spaltennamen = new Vector();
try {
ResultSet ergebnis = abfrage.executeQuery("SELECT ...");
ResultSetMetaData tabellenstruktur = ergebnis.getMetaData();
int spalten = tabellenstruktur.getColumnCount();
// die Spaltennamen aus der Datenbank verwenden
for (int a=1; a<=spalten; a++) Spaltennamen.add(tabellenstruktur.getColumnName(a));
while (ergebnis.next()) {
Vector einezeile = new Vector();
for (int a=1; a<=spalten; a++) {
einezeile.add(ergebnis.getString(a));
}
Daten.add(einezeile);
}
} catch (SQLException e)
{
}
// Tabelle erzeugen und anzeigen
JTable tabelle = new JTable(Daten,Spaltennamen);
this.getContentPane().add(new JScrollPane(tabelle));
}
public static void main(String[] args)
{
try {
TableTest fenster = new TableTest();
fenster.setSize(200,200);
fenster.setVisible(true);
} catch (Exception e) {
}
}
}
[/PHP]
Hoffe das hilft dir weiter. Falls du eine gute Klasse erstellst um Tabellen mit dem Ergebnis beliebiger SQL-Abfragen zu füllen, würde ich mich freuen wenn du die hier posten könntest.
derflix