MySQL Zwischenspeichern von DB-Inhalt

b0312

Mitglied
Hallo Community,

ich bin gerade am Arbeiten an einem Java-Programm.

Im GUI ist eine Tabelle mit 2 AbstractTableModels die je nach Button klick angezeigt werden.

1.smallTableModel: Eine vereinfachte Ansicht - braucht 1 SQL-Befehl und ist schnell geladen.
2.bigTableModel : Eine erweiterte Ansicht - braucht pro Datensatz 1 SQL-Befehl, braucht daher länger

Meine Frage wäre jetzt: Wie kann ich es realisieren, das auf Abruf der Tabelle das smallTableModel angezeigt wird und das bigTableModel im Hintergrund aufgebaut wird, damit man eine kürzere Wartezeit hat wenn man zum bigTableModel umschaltet.

2011042010h2228.png
 

areafo

Mitglied
Beides beim Laden der Form abfragen u dann je nach Button einfach sichtbar u unsichtbar machen. Also praktisch 2 Tabellen überlagern u nur immer eine einblenden. Im Hintergrund kann dann bequem aktualisiert werden.


Idee wäre auch noch in z.B. Arrays die Datensätze vorhalten u dann einfach laden.
 
Zuletzt bearbeitet:

fastjack

Top Contributor
Warum eigentlich pro Datensatz ein SQL-Befehl? Schreib komplexe Queries und lade alles mit einem Schwung. Du kannst z.B, where ID in [11, 44, 50, 51] etc. nutzen. Verwende Joins. Dein Ziel sollte sein, so wenig wie möglich Zugriffe auf die DB zu machen.
 

b0312

Mitglied
Vielen Dank für die Antworten !

@ areafo

Beides beim Laden der Form abfragen u dann je nach Button einfach sichtbar u unsichtbar machen.

Derzeit ist es bei mir so, das ich 2 AbstractTableModels aufbaue, diese werden dann je nach Buttonklick angezeigt (im Prinzip so wie du es jetzt vorgeschlagen hast), allerdings werden sie erst angezeigt wenn beide Modelle fertig sind.

Java:
setPanelMain(new LaufendeAuftraege(vorgangsliste.drawTable(laufend), vorgangsliste.drawSmallTable(laufend)));

Dies wird beim Button-Klick zuerst ausgeführt (d.h. er zeichnet beide TabellenModelle), dannach wird
Java:
tabelle.setModel(drawSmallTable);
ausgeführt.

@fastjack

Warum eigentlich pro Datensatz ein SQL-Befehl?

Wenn es anders möglich ist, bin ich gerne dafür.
Derzeit ist es so, das man über meinen Client Daten aus einem Textfile in die Datenbank schreibt.
Beim anzeigen dieser Daten aus der Datenbank .. müssen immer die Datensätze angezeigt werden, die die aktuellste Zeit haben. (Die Zeit steht im Textfile).
Es kann aber z.B. vorkommen:


Name Beschreibung Stück Uhrzeit
Bsp 1 Kurztext 1 15 17.04.2010 13:10
Bsp 1 Kurztext geändert 20 18.04.2010 14:25
Bsp 2 Kurztext 23 233 17.04.2010 13:10
Bsp 2 Kurztext 23 150 17.04.2010 14:00

Die Tabelle ist natürlich anders, aber im Prinzip gleich aufgebaut.
z.B. in diesem Beispiel muss ich in meinem Client Datensatz 2 und 4 anzeigen.
Ich habe keine bessere Lösung parat, als für jeden Satz einen Befehl auszuführen, wenn es alternativen gibt, bin ich natürlich sehr interessiert daran.
 
Zuletzt bearbeitet:

areafo

Mitglied
Was ich nicht verstehe.

Du sagst die Daten aus dem Textfile in die DB. Warum erfasst du dann nicht die Zeit als weiteres Feld im Datensatz? Du musst nur sicherstellen, dass alle Daten aus Textfile in DB stehen u dann gehst du nur noch in die DB per Where Klausel u sagst Höchster Datumswert.
 

b0312

Mitglied
Was ich nicht verstehe.

Du sagst die Daten aus dem Textfile in die DB. Warum erfasst du dann nicht die Zeit als weiteres Feld im Datensatz? Du musst nur sicherstellen, dass alle Daten aus Textfile in DB stehen u dann gehst du nur noch in die DB per Where Klausel u sagst Höchster Datumswert.

Das Datum ist bereits drinnen, wie man sehen kann.

2011042017h1154.png


Das Problem ist es gibt Datensätze deren Datum z.B. 4.3.2011 14:28 ist und angezeigt werden soll und
ein weiterer Datensatz deren Datum z.B. 21.3.2011 17:20 ist.
 

Nightmares

Aktives Mitglied
SQL:
SELECT * FROM `db`.`table` WHERE (`datum`=123) OR (`datum`=321) OR (`datum`=231); -- und so weiter
Du kannst für jede Zeile/Text Datei die du hast die Where-Klausel der Abfrage erweitern.
 

r.w.

Bekanntes Mitglied
Hallo b0312,

Wenn es wirklich nur um die neuesten Sätze geht, wäre doch so etwas möglich:

SQL:
SELECT * FROM tabellenname ORDER BY datum DESC LIMIT 1, 10
('tabellenname' und 'datum' sind natürlich entsprechend zu ersetzen ;-) )

Womit die aktuellsten 10 Sätze ausgewählt werden sollten.

VG ROlf
 

Ähnliche Java Themen


Oben