# TableModel mit Daten aus Datenbank füllen



## Kim (2. Sep 2010)

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


----------



## Marcinek (2. Sep 2010)

Komische Anforderung..

Aus welchem Grund soll das so sein?

Dann sieht dein Ansatz so aus, dass du dir ein eigenes TableModel schreiben musst.


----------



## SlaterB (2. Sep 2010)

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


----------



## Kim (2. Sep 2010)

Hey,

hatte gelesen, dass das zwischenspeichern nicht nötig sei und es so auch schneller gehen würde.


Kim


----------



## SlaterB (2. Sep 2010)

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


----------



## Kim (2. Sep 2010)

> Du kannst es auch direkt in das Tabellenmodel schreiben:
> 
> try { // executeQuery - Datenabfrage
> Statement st=mySql.connection.createStatement();
> ...




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?


----------



## SlaterB (2. Sep 2010)

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.


```
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


----------



## Kim (2. Sep 2010)

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!


----------

