Liste von ResultSets

Status
Nicht offen für weitere Antworten.

Capasso

Bekanntes Mitglied
Hi,

sagen wir man hat 40 identisch aufgebaute Tabellen in einer Datenbank.

Jetzt möchte ich aus 15 oder 23 oder ... Tabellen alle Werte auslesen und verabeiten.
Bisher lese ich die Tabellen nacheinander aus und packe die Daten in eine ArrayList und bearbeite anschließend die, doch sehr große, Liste.

Jetzt habe ich mir gedacht, dass es wahrscheinlich besser wäre die Daten direkt zu verarbeiten anstatt sie erst komplett in die ArrayList zu laden.

Am Besten wäre es wenn ich ne Klasse hätte die beliebieg viele ResultSets aufnehmen kann, dann nacheinander über diese iteriert und mir ein bestimmtes Attribut zurückgibt.

Hab mir schon auf java-blog-buch.de die Themen Iterator und Collections durchgelesen, weiß aber nicht genau wie ich anfangen soll.

Hat jemand einen oder mehr Tipps:)
 
S

SlaterB

Gast
Liste von ResultSets: List<ResultSet>
ResultSets einfügen: add, entnehmen: get,
einzelne ResultSets durchlaufen,

das sind doch alles bekannte einfache Schritte, du musst sie nur programmieren..,

noch schlauer wäre vielleicht, wenn überhaupt, nur die Queries zu sammeln
und dann nacheinander die Queries zustellen und die Ergebnisse zu verarbeiten,
ohne mehrere ResultSets vorrätig zu haben, immer eins reicht, wenn fertig, dann nächste Query stellen
 

Ebenius

Top Contributor
Liste von ResultSets: List<ResultSet>
Alternativ kann man auch die Datenbank die Arbeit machen lassen und alles in einem SELECT abhandeln und nur ein Resultset benutzen. Dazu könnte man eine View auf der Datenbank benutzen oder ein großes SELECT-Statement, ad lib.

Für Oracle könnte die View so aussehen:
SQL:
CREATE OR REPLACE VIEW v_joined_tables AS
	SELECT	'Table 1' AS table_name,
		*
	FROM tbl_table_1
	UNION ALL
	SELECT	'Table 2' AS table_name,
		*
	FROM tbl_table_2
	UNION ALL
	...
;
Die Query dazu könnte dann lauten:
SQL:
SELECT * FROM v_joined_tables WHERE table_name IN ('Table 15', 'Table 23')

Die Super-Query wäre entsprechend:
SQL:
SELECT	'Table 15' AS table_name,
	*
FROM tbl_table_15
UNION ALL
SELECT	'Table 23' AS table_name,
	*
FROM tbl_table_23
Ebenius
 

tfa

Top Contributor
Erstmal würd ich mich fragen, warum es 40 identisch aufgebaute Tabellen gibt.
 

Capasso

Bekanntes Mitglied
Die Super-Query wäre entsprechend:
SQL:
SELECT	'Table 15' AS table_name,
	*
FROM tbl_table_15
UNION ALL
SELECT	'Table 23' AS table_name,
	*
FROM tbl_table_23
Ebenius

Das hab ich schonmal ausprobiert, aber dann dauerte die SQL Abfrage ziemlich lange, viel länger als alles einzeln zu machen.

Erstmal würd ich mich fragen, warum es 40 identisch aufgebaute Tabellen gibt.

Weil jede Tabelle unterschiedliche Informationen speichert. Sie haben nur die gleiche Struktur.

Liste von ResultSets: List<ResultSet>
ResultSets einfügen: add, entnehmen: get,
einzelne ResultSets durchlaufen,

das sind doch alles bekannte einfache Schritte, du musst sie nur programmieren..,

noch schlauer wäre vielleicht, wenn überhaupt, nur die Queries zu sammeln
und dann nacheinander die Queries zustellen und die Ergebnisse zu verarbeiten,
ohne mehrere ResultSets vorrätig zu haben, immer eins reicht, wenn fertig, dann nächste Query stellen

Hab ich mir auch schon gedacht.

Aber ich hätte gerne den Sql und Datenbankkram nicht in der selben Klasse.

Wie soll ich das Erklären.

Datanbankklasse erstellt eine Liste von ResultSets (Klasse: ResultSetList oder so) und die Bearbeitungklasse kann dann ganz einfach mit einer Foreach-schlreife über alle Ergebnisse aller ResultSet iterieren.
 
M

maki

Gast
Weil jede Tabelle unterschiedliche Informationen speichert. Sie haben nur die gleiche Struktur.
Ähm.. das ist bestenfalls suboptimal für ein DB Schema.

ResultSets sollten so schnell wie möglich geschlossen werden, denn jedes offene ResultSet belegt DB Server Ressourcen.

ber ich hätte gerne den Sql und Datenbankkram nicht in der selben Klasse.
ResultSets gehören aber nunmal zum "Datenbankkram" ;)
 
S

SlaterB

Gast
> Aber ich hätte gerne den Sql und Datenbankkram nicht in der selben Klasse.

wenn du die ResultSets übergibst, dann hast du ja auch SQL-Kram in derselben Klasse,

du kannst aber gerne WrapperObjekte bauen
Java:
List<QueryVorbereitung> list =..;
for (QueryVorbereitung q : list) {
   ResultSet r = q.gibDeinResultSetObGespeichertOderNeuAusgeführtMirEgal();
   r durchlaufen usw.
   q.binFertigFallsDuIrgendwasClosenMusstDannJetztMirEgal();
}
eine Liste der ResultSets geht natürlich immer noch
 

Capasso

Bekanntes Mitglied
Ähm.. das ist bestenfalls suboptimal für ein DB Schema.

ResultSets sollten so schnell wie möglich geschlossen werden, denn jedes offene ResultSet belegt DB Server Ressourcen.


ResultSets gehören aber nunmal zum "Datenbankkram" ;)

Da hab ich mich falsch ausgedrückt. Ich meinte ich hätte gerne nichts von beidem in der Bearbeitungklasse
 

tfa

Top Contributor
Weil jede Tabelle unterschiedliche Informationen speichert. Sie haben nur die gleiche Struktur.
Wie wär's, wenn du nur eine Tabelle hast und der eine zusätzliche Spalte gibst, wo du den Typ der Information reinschreibst? Dann hast du nicht 40 Tabellen, sondern nur eine mit einer Diskriminator-Spalte, die 40 unterschiedliche Werte haben kann.
 

Capasso

Bekanntes Mitglied
Wie wär's, wenn du nur eine Tabelle hast und der eine zusätzliche Spalte gibst, wo du den Typ der Information reinschreibst? Dann hast du nicht 40 Tabellen, sondern nur eine mit einer Diskriminator-Spalte, die 40 unterschiedliche Werte haben kann.

Nein, die Tabellen müssen so bleiben wie sie sind.
 
M

maki

Gast
Würde mir da eine/mehrere Datenstruktur schreiben, welche die Werte aus den ResultSets aufnimmt.
Dann die Abfragen abfeuern, und jedes einzelne ResultSet in diese Datenstruktur(en) umwandeln.
Wenn dann alle Daten aus der DB gelesen sind, kannst du ja mit der Verarbeitung beginnen.
 

ARadauer

Top Contributor
nebenbei... aufpassen das das Statement und die Connection nicht geschlossen wird, bevor du mit der Verarbeitung fertig bist, sonst wird dein Resultset auch geschlossen...
 

Ebenius

Top Contributor
Weil jede Tabelle unterschiedliche Informationen speichert. Sie haben nur die gleiche Struktur.
Ähm.. das ist bestenfalls suboptimal für ein DB Schema.
Die Aussage ist ziemlich pauschal und damit auch oft falsch. ;)

ResultSets sollten so schnell wie möglich geschlossen werden, denn jedes offene ResultSet belegt DB Server Ressourcen.
Stimmt oft. Ist aber letztlich immer abhängig vom Anwendungsfall. Es gibt nicht wenige Fälle in denen die direkte Verarbeitung der Datensätze mehr Sinn ergibt, als die Daten alle in eine interne Struktur abzulegen und danach zu verarbeiten.

Würde mir da eine/mehrere Datenstruktur schreiben, welche die Werte aus den ResultSets aufnimmt. [...] Wenn dann alle Daten aus der DB gelesen sind, kannst du ja mit der Verarbeitung beginnen.
Bei einer Million Einträge überlegt man sich das dann doch anders. ;)

Das hab ich schonmal ausprobiert, aber dann dauerte die SQL Abfrage ziemlich lange, viel länger als alles einzeln zu machen.
Hier können je nach Datenbanksystem PreparedStatements helfen. Oder Du probierst es mal mit der View; das kann je nach Datenbanksystem ebenfalls helfen.

Wenn es Dir nur um die Trennung geht, dann kapsele doch einfach Deine Datenbankzugriffe wie von Slater bereits erwähnt.

Ebenius
 

pada

Mitglied
Hallo zusammen!

Ich wünsche allen ein gutes neues Jahr!

Ich greife diesen Thread nochmal auf da ich ein ähnliches Problem habe.

Ich muß mit meiner Gruppe eine Zwischenschicht programmieren um eine horizontal verteilte Datenbank zu realisieren.
Das ist ein stark vereinfachtes System und soll nicht den vollen Funktionsumfang von SQL-Anweisungen abbilden. Es sollen "einfache" Queries aller SELECT * FROM XY ODER BY Z aber auch etwas komplexere wie einige JOINs möglich sein.

Technische Infrastruktur:
3 Oracle Server (physikalisch getrennte Maschinen S1-S3)

Hintergrund:
Der Inhalt einer Tabelle wird auf alle drei Server verteilt gespeichert. Bedeutet Row1-20 auf S1, Row21-20000 auf S2, Row20001-30000 auf S3, Row30001-32000 auf S2, usw.
Die Struktur (CREATE) der Tabelle ist auf allen Servern identisch, Contraints werden soweit nötig (z.B. ForeignKey) werden außerhalb der Oracle Instanzen geprüft, da evtl. eine Referenz auf einem anderen Server gespeichert ist.

Soweit mir bekannt gibt es keine Möglichkeit "einfache" (ohne zusätzliche Ebenen) Oracle Server zu überreden sich mit den anderen Servern auszutauschen.

Ein einfaches SELECT * FROM XY erzeugt bei mir ein PseudoResultSet das die ähnliche Arbeitsweise beim auslesen durch den Anwender hat wie Salter B mit der Wrapperklasse beschreibt. Ich führe auf allen drei Servern das SELECT aus und bekomme drei ResultSets welche ggf. sortiert sind und gehe iteriere strukturiert über diese so das der Anwender nichts bemerkt.

ABER wenn ich jetzt die JOINs noch machen will, also zwei Tabellen (jetzt 2 verschiedene ResultSets) joinen, dann kann ich wohl wie ich gesehen habe die Klasse JoinRowSet nutzen, aber dafür benötige ich je ein ResultSet für jede Tabelle wenn ich es richtig verstanden habe.

Und da ist das große Problem:
Jetzt muß ich aus den 2x3 ResultSets (3 weil eines von jedem Server um eine gesamte Tabelle darzustellen) 2x1 ResultSets machen.
Muß sozusagen gesamtSet=Set1.append(Set2.append(Set3))) durchführen.
Habe aber keine Methoden gefunden und auch keine Klassen gefunden die eine Row in dem Set darstellen oder wie ich eine ganze Zeile als Struktur auslesen kann um diese dann ggf. in eine riesige ArrayList o.ä. zu packen. Ich wollte eigentlich nach Möglichkeit gerne die ResultSet Klassen weiter nutzen da scheinbar die Verbindung zur physikalischen DB weiter besteht und die Daten erst tatsächlich bei Bedarf gelesen werden, das ResultSet scheinbar "nur" eine Struktur des Ergebnisses darstellt. Damit könnte ich Speicher sparen oder gar bei xMillionen Sätzen ein OutOfMemory verhindern.

Hat jemand eine Idee wie ich n-ResultSets zu einem zusammen fassen kann? Die Struktur aller Sets ist identisch das alle die gleiche Tabellen (Struktur) abfragen, halt nur auf n-Servern.
Oder gibt es Frameworks die man nutzen könnte.

Vielen Dank!

Grüße

PS: Hab so viel geschrieben damit es möglichst deutlich wird.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Fynn29 Liste sortieren ohne Array und ohne vorgegebene Sortierung Allgemeine Java-Themen 24
MiMa Filtern von TableView Liste Allgemeine Java-Themen 2
B Liste aller Kombintionen mit Einschränkungen Allgemeine Java-Themen 8
TheSepp Wie kann man Leerzeichen aus einer Array liste entfernen? Allgemeine Java-Themen 10
B Liste ändern während Iteration über Diese? Allgemeine Java-Themen 16
D Erste Schritte Liste erweitern Allgemeine Java-Themen 11
sserio Variablen Liste erstellt und ein Problem mit dem Index Allgemeine Java-Themen 6
L allgemein Strings händisch in Liste sortieren Allgemeine Java-Themen 47
M einfach verkettete Liste verstehen Allgemeine Java-Themen 23
Drachenbauer wie kann ich alle instanzen einer Klasse durchsehen, ohne, dass diese in einer Liste erzeugt wurden? Allgemeine Java-Themen 11
Gaudimagspam Skip Liste erstellen in Java Allgemeine Java-Themen 3
G Java Editor Löschen doppelter Zahlen einer Liste Allgemeine Java-Themen 2
bueseb84 Spring Boot Entity mit Liste Allgemeine Java-Themen 4
MiMa Werte in liste speichern? Allgemeine Java-Themen 3
Curtis_MC Collections Liste anhand mehrere Kriterien sortieren Allgemeine Java-Themen 6
K verkettete Liste Allgemeine Java-Themen 3
G Liste (UsageStats) sortieren (Android) Allgemeine Java-Themen 5
T Google Links in einer Liste Allgemeine Java-Themen 4
looparda Liste filtern nach Prädikaten verschiedener Typen Allgemeine Java-Themen 3
OSchriever Einfach verkettete Liste ändern Allgemeine Java-Themen 43
L Liste überschreibt alte Elemte Allgemeine Java-Themen 10
H Länge einer verketteten Liste Allgemeine Java-Themen 4
E Erstellen einer Liste mit einer maximalen Menge an Elementen Allgemeine Java-Themen 13
P Element einer Liste wurde hinzugefügt, aber es gibt keinen Zugriff Allgemeine Java-Themen 2
S Methoden Liste soll Methode aus innerer Klasse aufrufen Allgemeine Java-Themen 4
L Erste Schritte Liste von Datums filter nach Monate Allgemeine Java-Themen 4
Y Liste in Stream Packen Allgemeine Java-Themen 1
K Einfache Verkettete Liste mit Node Allgemeine Java-Themen 3
perlenfischer1984 Reflection : Element in generische Liste hinzufügen Allgemeine Java-Themen 4
perlenfischer1984 Liste mit generics zurück liefern Allgemeine Java-Themen 8
S Verkettete (Teil)Liste sortieren ( rekursiv bis n) Allgemeine Java-Themen 2
G Liste zwischen zwei Kalenderdaten erstellen Allgemeine Java-Themen 3
B Wie vergleiche ich Strings in einer Liste? Allgemeine Java-Themen 5
Viktim Threads Liste In unterschiedlichen Threads bearbeiten Allgemeine Java-Themen 23
A Collections Inhalt einer Liste mit Inhalt anderer Liste vergleichen ? Allgemeine Java-Themen 7
I Abstrakte Datentypen - Liste Allgemeine Java-Themen 9
D Datentypen Klassenattribut aus Objekt in generischer Liste Allgemeine Java-Themen 15
P Liste zu Objekt umwandeln Allgemeine Java-Themen 4
Z In die Liste kann ich nichts adden Allgemeine Java-Themen 16
C Liste checken auf MINDESTENS ein Objekt | Bukkit Allgemeine Java-Themen 3
M liste von listen anders ausgeben Allgemeine Java-Themen 1
B Per Buttonklicks einer Liste Wörter hinzufügen - Wie umsetzen? Allgemeine Java-Themen 11
H Liste sortieren anhand optionalem Property Allgemeine Java-Themen 3
L Liste führt sich nicht weiter Allgemeine Java-Themen 5
A Input/Output Liste der Dateien in einem Ordner in einer Jar Datei erhalten Allgemeine Java-Themen 11
J Fragen zu generischer doppelt verketteter Liste (bei fehlendem Grundverständnis) Allgemeine Java-Themen 1
B Prüfen, ob ein Element in der Liste nicht existiert Allgemeine Java-Themen 3
B Klassen JTable mit einer Liste Allgemeine Java-Themen 0
X HTTP Auslesen der Ergebnisse von einer Webseite und in eine Liste packen Allgemeine Java-Themen 1
A Auslesen einer Datei sowie ausgeben als Liste in App Allgemeine Java-Themen 5
E Liste löscht sich selbstständig Allgemeine Java-Themen 5
H Liste von Objekten generisch sortieren Allgemeine Java-Themen 0
D Liste anhand Standardnormalverteilung befüllen Allgemeine Java-Themen 1
M Threads synchroner Zugriff (add/delete/read) auf eine Liste Allgemeine Java-Themen 6
T Datentypen Eine Liste - verschiedenen Klassen - eine Abstracte Klasse Allgemeine Java-Themen 3
M Werte aus DB in Liste speichern ohne mehrfach speicherung Allgemeine Java-Themen 18
G Liste anzahl der gleichen Objekte Allgemeine Java-Themen 6
S Pattern.Match Suche: For Schleife einbinden und in Liste schreiben Allgemeine Java-Themen 3
O aus Liste ein beliebiges Element auswählen Allgemeine Java-Themen 7
J Liste aller Com-Ports - zweistellige Ports? Allgemeine Java-Themen 15
O MVC - wo Liste der ComboBox-Items ermitteln Allgemeine Java-Themen 3
MiMa Liste von Pfaden in eine textArea schreiben Allgemeine Java-Themen 7
K kontinuierlich aktuelle Bestellsystem-Liste mit farbigem Status Allgemeine Java-Themen 2
A Auswählbare Liste Allgemeine Java-Themen 2
D Sortieren von Liste zu unperformant Allgemeine Java-Themen 6
N Liste gesucht Allgemeine Java-Themen 2
Z Sortiertes Einfügen in doppelt verkettete Liste Allgemeine Java-Themen 5
S Probleme beim Auslesen einer Liste Allgemeine Java-Themen 8
O JSON String bauen aus Liste Allgemeine Java-Themen 2
M Über Liste verschiendene JComponents mit eigenem implementierten Interface ansprechen Allgemeine Java-Themen 7
T Hashmap mit geordneter/ungeordneter liste als Value Allgemeine Java-Themen 5
D Zugriff auf Array-Liste Allgemeine Java-Themen 19
S Threads Liste mit Objekten in Teillisten zerlegen und abarbeiten Allgemeine Java-Themen 3
R ThreadPool - vorhandene thread liste überprüfen bzw. aufräumen Allgemeine Java-Themen 3
pg1337 Liste füllen Allgemeine Java-Themen 2
U Große Liste von Strings mit indiziertem Zugriff Allgemeine Java-Themen 31
B Properties File Liste Allgemeine Java-Themen 3
Gossi Collections Liste zusammenfassen für JSP Allgemeine Java-Themen 4
Gossi Collections (Unbekannte) Liste Sortieren Allgemeine Java-Themen 10
T Collections Liste schnell/nebenläufig durchgehen Allgemeine Java-Themen 2
M Objekt aus Liste in Liste suchen/löschen Allgemeine Java-Themen 6
Q "Doppelte" Einträge einer Liste entfernen Allgemeine Java-Themen 14
C Exponentielle Verteilung in einer Liste Allgemeine Java-Themen 7
Nic.o liste der installierten Zertifikate ?! Allgemeine Java-Themen 3
T Liste mit GregorianCalendar-Objekten in List einlesen, mit Collection sortieren und ausgeben Allgemeine Java-Themen 3
M Verständnisfragen bezüglich Liste Allgemeine Java-Themen 3
S AWT Wie bekomme ich eine Liste aller chars in einem Font? Allgemeine Java-Themen 3
J Zeichenketten-Liste filtern Allgemeine Java-Themen 6
S Aus einer Liste<Oberklasse> alle Elemente die eine bestimmte Unterklasse von Oberklasse haben filter Allgemeine Java-Themen 8
K Liste aller implementierenden Klassen einer Oberklasse anzeigen Allgemeine Java-Themen 4
M Eintrag verschwindet aus Liste Allgemeine Java-Themen 3
E Objekte in einer Liste suchen. Allgemeine Java-Themen 4
I Über eine Liste iterieren und Objekte löschen. Wie löst man das sauber? Allgemeine Java-Themen 5
reibi Kopie einer Liste Allgemeine Java-Themen 4
N Liste mit Map abgleichen extrem langsam Allgemeine Java-Themen 6
C Darstellung der Liste bei vielen Daten extrem langsam Allgemeine Java-Themen 11
T Liste sortieren Allgemeine Java-Themen 6
L Objekte in Liste packen Allgemeine Java-Themen 2
N Liste aendern waehrend des iterierens ueber selbige Allgemeine Java-Themen 11
B Datenstruktur: Liste Allgemeine Java-Themen 5

Ähnliche Java Themen

Neue Themen


Oben