TableModel mit Daten aus Datenbank füllen

Kim

Mitglied
Hallo zusammen,

ich hänge zurzeit an dem Problem, dass ich meine Daten aus einer Datenbank nicht in das AbstractTableModel bekomme. Ich habe natürlich schon viel gegoogelt, jedoch leider nichts gefunden, was auf mein Problem passt.

Ich will meine Daten direkt in das Model packen, ohne es zwischenspeichern zu müssen, egal ob Array oder Vektor.
Kann gut sein, dass es an mir liegt, weshalb ich nichts gefunden habe, da das Thema: JTable / TableModel bis vor wenige Tage neu war für mich.

Bei der Datenbank handelt es sich um eine FireBird-DB, was jedoch nicht so wichtig sein dürfte.


Vielen Dank & Grüße

Kim
 
Zuletzt bearbeitet von einem Moderator:
Komische Anforderung..

Aus welchem Grund soll das so sein?

Dann sieht dein Ansatz so aus, dass du dir ein eigenes TableModel schreiben musst.
 
AbstractTableModel hat an sich überhaupt keine Kapazitäten, irgendwas zu speichern/ zu übergeben,
da bekommst du nicht einen Datensatz hinein, ob einzeln, Array oder Liste/ Vektor,

erstmal brauchst du ein anderes Model
 
wenn du die Quelle postest/ zitierst kann man dies vielleicht näher erläutern,
ansonsten ist vorher nichts genaues zu sagen

generell gilt immer und überall, dass Übertragung in Listen vielleicht eine unnötige Liste beinhaltet,
die am Ende weggeworfen wird, weil die Daten in die intere Datenstruktur übernommen werden,
dagegen hilft z.B. eine Methode addSingeEntry(entry), falls es sie gibt, wo auch immer,

mit nicht allzu großen Pech kann man sich da dann aber andere gravierendere (und immer noch nebensächliche) Probleme einhandeln,
etwa dass die intere Datenstruktur mehrfach mit gewissen Aufwand vergrößert werden muss, viel mehr als die eine unnötige Liste,
hätte man gleich alle Datensätze in einer Liste übergeben, wäre das Einfügen in die interne Datenstruktur vielleicht effektiver, trotz der danach weggeworfenen Liste

viel wichtiger ist aber, dass du über solche Nebensächlichkeiten nicht nachdenken solltest,
relevant ist das Programm, die Funktionalität, nicht irgendwelche Details im Promille-Bereich Zeit/ Platz
 
Zuletzt bearbeitet von einem Moderator:
Du kannst es auch direkt in das Tabellenmodel schreiben:

try { // executeQuery - Datenabfrage
Statement st=mySql.connection.createStatement();
ResultSet rs = st.executeQuery("select...");
ResultSetMetaData rsmd = rs.getMetaData();
for(int i=1; i<=rsmd.getColumnCount(); i++)
tabellenModel.addColumn(rsmd.getColumnName(i));
while(rs.next() ) {
String[] reihe = new String[rsmd.getColumnCount()];
for(int s=1; s<=rsmd.getColumnCount(); s++)
reihe[s-1]=rs.getString(s);
tabellenModel.addRow(reihe); // neue Reihe hinzufügen
} //EndWhile
rs.close(); st.close();
} catch( SQLException ex ) {}[/B]


Dies hatte ich mal versucht (abgeändert), jedoch gibt es (bei mir) die methode addRow() nicht.

Oder kann es vielleicht sein, dass die zitierte Person sich vertan hat und Code für ein anderes Model gepostet hat?
 
ich halte es vorerst wahrscheinlicher, dass du dich beim Lesen/ bei der Interpretation vertan hast, als die Person, die den Code geschrieben hat 😉
zumal in dem Quote nicht steht, als was das TableModel dort bezeichnet ist

was es tatsächlich IST, ist klar, ein DefaultTableModel, da gibt es addRow(), entspricht ja im wesentlichen meinen Erläuterungen,
kannst ruhig direkt addRow() nehmen statt erst alles in eine Liste zu machen, aber von der Performance her ist das wirklich irrelevant,

viel interessanter wiederum habe ich einen anderen allgemeinen Merksatz anzumerken: Trennung von Zuständigkeiten,
du vermischst hier DB-Code mit Swing-GUI, was ist wenn du später mal dieselben Daten für einen anderen Zweck, etwa einer interner Auswertung, laden möchtest?
dann stört das nicht benötigte TableModel darin, dann musst du wahrscheinlich eine zweite Methode schreiben

wichtiger als irgendwelche Performance-Gedanken ist ein sauberer übersichtlicher und verwendbarer Aufbau,
alle DB-Methoden in eine Klasse, allen GUI-Kram in eine andere usw.

Java:
Klasse DB {
  public List loadDataX();
}
Klasse GUI {
  public void guiXY() {
    List data = DB.loadDataX();
    model.setData(data); 
  }
}
Klasse Logik {
  public void logikXY() {
    List data = DB.loadDataX();
    analyse data
  }
}
Listen als neutrale Austausch-Objekte sind dabei ganz normal, auch dass sie wieder weggeworfen werden
 
Zuletzt bearbeitet von einem Moderator:
Hallo SlaterB,

du hast recht, nicht der zitierte hat sich geirrt, sondern ich.
Es ist garnicht die Rede von AbstractTableModel, ich muss wohl etwas verwechselt haben, sry.

Übersichtlicher Aufbau: Mein Code sieht nicht aus, wie der zitierte!!!


Ich versuch mein Glück mal ohne AbstractTableModel.

Vielen dank!
 

Zurück
Oben