ResultSet: vorheriges Element auslesen

azenth

Mitglied
Guten Tag Java Community,

ich schreibe an einem Programm, welches Werte aus einer Datenbank ausliest und diese in eine Liste schreibt.
Das Problem was ich an dieser Stelle habe ist, dass folgende Werte von der DB zurück geliefert werden, die ich dann nicht entsprechend weiter verarbeiten kann:

SELECT Statement:
Code:
SELECT DISTINCT h.host, t.tag FROM host h, host_tag ht, tag t
WHERE h.platform = 'linux' and h.hid = ht.hid and ht.tid = t.tid;

Folgende Werte werden dann zurück gegeben:

Code:
Server1   bla
Server1 blub
Server1 tschö
Server2 null
Server3 null
Server4 linux
Server4 blub
Server5 linux
Server6 null
Server7 null

Was ich nun erreichen möchte ist, dass jeder Server nur einmal in die Liste eingetragen wird und die Tags durch ein '|' Pipe getrennt die zu einem Server gehören auch.

Mein Code sieht momentan wie folgt aus:

Java:
				while(rset.next()) {
					if(ok) {
						if(rset.getString("tag") != null && ok) {
							tmpTag = tmpTag + rset.getString("tag") + "|";
							tmpHost = rset.getString("host");								
						} else {
							tmpTag = "";
						}
					} else {
						if(tmpHost.equals(rset.getString("host"))) {
							ok = true;
						} else {
							ok = false;
						}
						tmpHost = rset.getString("host");
					}

					if(ok) {
						hostList.add(new myList(rset.getString("host"), tmpTag));
					}
				}

Soweit so gut aber was in die Liste geschrieben wird sieht wie folgt aus:

Code:
Server1   bla
Server1 bla|blub
Server1 bla|blub|tschö
Server2 null
Server3 null
Server4 linux
Server4 linux|blub
Server5 linux
Server6 null
Server7 null

Ich sitze schon seit gestern dran und komme einfach nicht auf den Trichter was ich genau falsch mache.

Vielen Dank für alle Hinweise.

Gruß
Azenth
 
Zuletzt bearbeitet von einem Moderator:

Joose

Top Contributor
Java:
if(ok) {
    if(rset.getString("tag") != null && ok) {

Beim 2.if kannst du dir das "&&ok" sparen ;)

Warum verwendest du keine Map<String, String>? Damit kannst du den Server als Key verwenden und die Tags sind dann die Values.
Und zu Beginn überprüfst du einfach ob für den Server schon ein KeyValuePair vorhanden ist. Wenn ja wird das erweitert, ansonsten ein neues eingefügt
 

azenth

Mitglied
Ich habe an eine Map nicht gedacht.

Mit der Liste geht das dann also nicht?

Ich habe daran gedacht, den vorherigen Wert aus rSet mit dem aktuellen Wert aus rSet zu vergleichen und darüber rauszufinden, ob der Host sich geändert hat und wenn ja soll das ganze in die Liste hinzugefügt werden.

Aber ich glaube es ist nicht möglich den aktuellen Wert mit dem vorherigen zu vergleichen oder?
 

Joose

Top Contributor
Klar kannst du es auch mit einer Liste realisieren, aber die Map bietet sich hier doch bestens an.
Du willst für einen bestimmten Key (hier Server) deinen Wert (hier Tags) ändern/erweitern.

Nein den vorherigen Wert müsstest du in einer lokalen Variable zwischenspeichern.
 

JavaOHJA

Mitglied
Java:
SELECT DISTINCT h.host, t.tag FROM host h, host_tag ht, tag t
WHERE h.platform = 'linux' and h.hid = ht.hid and ht.tid = t.tid;

liest du hier aus 2 verschiedenen Tabellen? dann fehlt ein join, wenn nicht, dann sollte das FROM erst nach aufzählen aller Felder kommen oder?

gruß
 

azenth

Mitglied
Ja nur meine Liste, besteht hier noch aus weiteren Values, die ich in diesem Beispiel nicht angegeben habe.

Code:
hostList.add(new myList_sssss(rset.getString("host"), Integer.parseInt(rset.getString("id")), tmpTag, rset.getString("ip"), rset.getString("instance")));

All diese Werte bekomme ich von dem ResultSet aus der DB zurück. Kann ich in einer Map zu einem Key viele Values haben?

Gruß
 

azenth

Mitglied
Ja ich lese aus verschiedenen Tabellen.

Dies ist auch ein massiv vereinfachtes Beispiel:

Das Original Statement sieht wie folgt aus:

Code:
SELECT DISTINCT h.host, h.id, t.tag, h.ip, s.instance FROM host h LEFT OUTER JOIN host_tag ht ON h.host_id = ht.host_id LEFT OUTER JOIN tag t ON ht.tag_id = t.tag_id, satelliteserver s WHERE h.platform_id = '2' AND h.folder IS NULL AND h.id IN (11, 51) AND h.satelliteserver_id = s.satelliteserver_id AND EXISTS ( SELECT h1.fqhostname, h1.id FROM host h1, host_tag ht1 WHERE h1.host_id = ht1.host_id AND ht1.id IN (11,51) ) ORDER BY host

Wie gesagt es ist etwas komplexer.

Hintergrund ist, dass ich vorher alle diese Werte einzelnt abgefragt habe in meinem Skript, was eine sehr hohe Last auf der DB verursacht hat. Jetzt frage ich diese Werte in einem Statement ab. Aber ich habe nun das oben beschrieben Problem.

Gruß
Azenth
 

Dompteur

Top Contributor
Mit der Liste geht das dann also nicht?
Mit einer Liste geht das, wenn du aus der Datenbank eine nach Hosts sortiere Liste bekommst.


Ich habe daran gedacht, den vorherigen Wert aus rSet mit dem aktuellen Wert aus rSet zu vergleichen und darüber rauszufinden, ob der Host sich geändert hat und wenn ja soll das ganze in die Liste hinzugefügt werden.

Aber ich glaube es ist nicht möglich den aktuellen Wert mit dem vorherigen zu vergleichen oder?

Auf den letzten rSet Wert kannst du nicht mehr zugreifen.
Du kannst dir aber 2 temporäre Variablen definieren.

String currentHost : Anfangs null und dann der gerade behandelte Host
String currentTag : Anfangs null und dann der String mit den Tags zu currentHost

Dann "sammelst" du alle Tags der ersten Hosts. Sobald du zum nächsten Host kommst, schreibst die dein bisheriges Zwischenergebnis in deine Result-Liste und machst den neuen Host zu deinem currentHost. Gleichzeitig setzt du currentTag wieder auf null.

Nach der while Schleife musst du noch den zuletzt bearbeiteten Host in die Ergebnisliste schreiben.

Das würde dann so aussehen:
Java:
    String currentHost = null;
    String currentTag = null;

    while(rset.next()) {
        String tmpHost = rset.getString("host");
        String tmpTag = rset.getString("tag");

        if ( currentHost.equals ( tmpHost ) ) {
            if ( currentTag == null ) {
                currentTag = tmpTag;
            } else {
                currentTag = currentTag + "|" + tmpTag;
            }
        } else {
            if ( currentHost != null ) {
                hostList.add(new myList(currentHost, currentTag));
            }
            currentHost = tmpHost;
            currentTag = tmpTag;
        }
    }
    if ( currentHost != null ) {
      hostList.add(new myList(currentHost, currentTag));
    }
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
N ResultSet auf Einträge überprüfen Java Basics - Anfänger-Themen 5
I ResultSet aus meiner SQL-Abfrage in einem JTextfield ausgeben. Java Basics - Anfänger-Themen 1
C ResultSet in Array speichern Java Basics - Anfänger-Themen 5
S NullPointerException während ResultSet Java Basics - Anfänger-Themen 7
J MySQL Datumsabfrage über ResultSet in Java-Servlet Java Basics - Anfänger-Themen 4
A Werte innerhalb von resultset vergleichen Java Basics - Anfänger-Themen 2
H Variablen Zeile aus einem ResultSet ausleesen Java Basics - Anfänger-Themen 7
P Brauche Hilfe bei ResultSet mit MySQL Java Basics - Anfänger-Themen 6
1 ResultSet in Schleife "befüllen" Java Basics - Anfänger-Themen 4
K ResultSet.last() und die GUI friert ein Java Basics - Anfänger-Themen 2
K Methoden ResultSet als Methodenübergabewert kommt leer an Java Basics - Anfänger-Themen 0
S JTabel korrekt mit Datensätzen aus ResultSet füllen Java Basics - Anfänger-Themen 4
S Icons in JTable per ResultSet Java Basics - Anfänger-Themen 5
S ResultSet close() in funktion nich möglich. Java Basics - Anfänger-Themen 8
G ResultSet übergeben bzw. in andere Variable übernehmen Java Basics - Anfänger-Themen 6
J ResultSet.getStrin - doch kein String? oder wo liegt das Problem? Java Basics - Anfänger-Themen 3
A Erste Schritte Weiterverarbeitung Resultset Java Basics - Anfänger-Themen 12
R JDBC leeres ResultSet Problem Java Basics - Anfänger-Themen 2
S ResultSet in CSV speichern Java Basics - Anfänger-Themen 3
C Resultset.updateBinaryStream Java Basics - Anfänger-Themen 2
S mysql-connector-java-*.jar, MySql ResultSet - Alle ROWs ausgeben? Java Basics - Anfänger-Themen 3
M Frage zu ResultSet.next() Java Basics - Anfänger-Themen 7
S Resultset Closed (Mysql) Java Basics - Anfänger-Themen 5
C OOP JDBC: Ausgabe ResultSet nach Select Java Basics - Anfänger-Themen 3
G ResultSet SQLException Java Basics - Anfänger-Themen 11
K Problem mit ResultSet Java Basics - Anfänger-Themen 9
A Probleme mit dem ResultSet Java Basics - Anfänger-Themen 6
S bestimmtes Auslesen von Spalten eines ResultSet ? Java Basics - Anfänger-Themen 7
T ResultSet Exception Java Basics - Anfänger-Themen 2
M ResultSet Problem Java Basics - Anfänger-Themen 5
S aus Resultset JTabbedPane erzeugen Java Basics - Anfänger-Themen 5
G Frage zu ResultSet Java Basics - Anfänger-Themen 4
A "SQL : No resultSet was produced" ? Java Basics - Anfänger-Themen 7
G ResultSet & JTable Java Basics - Anfänger-Themen 4
K problem mit resultset und 2d-array Java Basics - Anfänger-Themen 3
G ResultSet übergeben Java Basics - Anfänger-Themen 2
K ResultSet öffnet sich garnicht erst Java Basics - Anfänger-Themen 9
M ResultSet Java Basics - Anfänger-Themen 4
M ResultSet als Objekt zurückgeben, wenn conn geschlossen? Java Basics - Anfänger-Themen 8
K ResultSet: Wie viele Rows beinhaltet es? Java Basics - Anfänger-Themen 6
A ResultSet Zeile als Objekt? Java Basics - Anfänger-Themen 10
G ResultSet getRow Java Basics - Anfänger-Themen 4
T Ganz schlimme Frage.:) ResultSet Java Basics - Anfänger-Themen 12
G ResultSet zurückgeben Java Basics - Anfänger-Themen 11
B Probleme bei ResultSet in einer While-Schleife Java Basics - Anfänger-Themen 2
M ResultSet klonen Java Basics - Anfänger-Themen 6
M ResultSet abfragen Java Basics - Anfänger-Themen 8
R In ResultSet Anzahl der Zeilen herausfinden? Java Basics - Anfänger-Themen 3
A 6. Element aus einem Array zurückgeben Java Basics - Anfänger-Themen 1
K Wie kann ich ein Element an den Anfang setzten ? Java Basics - Anfänger-Themen 1
pc pc pc pc pc letztes Element eines Arrays n Java Basics - Anfänger-Themen 3
heinrich172 Methoden Trotz gleichem Element stimmt Vergleich nicht? Java Basics - Anfänger-Themen 7
I Element n aus Datenbank Query (JPA / Hibernate) Java Basics - Anfänger-Themen 3
A Jedes zweite Element eines Arrays entfernen Java Basics - Anfänger-Themen 30
O Doppelt verkette Liste Element löschen Java Basics - Anfänger-Themen 15
L Längstes Element einer ArrayList ausgeben Java Basics - Anfänger-Themen 9
I Letztes, erstes Element vom Array Java Basics - Anfänger-Themen 9
districon Element in Liste einfügen Java Basics - Anfänger-Themen 1
Y Wie kann ich ein Element in einer toString finden. Java Basics - Anfänger-Themen 2
J Element aus Liste nehmen Java Basics - Anfänger-Themen 3
S Gibt es ein simples JWebbrowser Element? Java Basics - Anfänger-Themen 6
M Letztes Element einer ArrayList Java Basics - Anfänger-Themen 12
S Streams - kleinstes Element finden Java Basics - Anfänger-Themen 4
V_Fynn03 Beliebiges Element in einer Liste löschen (Java)(Lineare Datenstrukturen) Java Basics - Anfänger-Themen 9
V_Fynn03 Lineare Datenstrukturen Element löschen? Java Basics - Anfänger-Themen 2
J Selektiertes Element von jComboBox zwischenspeichern und wieder einsetzen Java Basics - Anfänger-Themen 0
Curtis_MC Collections Zufälliges Element aus Stack Java Basics - Anfänger-Themen 2
M Ist es möglich, das größte und zweitgrößte element in einem Array mit nur einer Schleife ausfindig zu machen ? Java Basics - Anfänger-Themen 19
X Array erstes und letztes Element tauschen Java Basics - Anfänger-Themen 2
A Konsolenausgabe: Hinter letztes Element ein "}" Java Basics - Anfänger-Themen 2
F nur das erste Element mit iterator ausgeben Java Basics - Anfänger-Themen 5
O Element aus Array löschen Java Basics - Anfänger-Themen 5
I Methoden List.contains() beim 2. Element = true Java Basics - Anfänger-Themen 1
M Array immer wieder um ein Element erweitern Java Basics - Anfänger-Themen 6
AnnaBauer21 org.w3c.dom.Element - Neues Element hinzufügen Java Basics - Anfänger-Themen 4
D doc.seect jsouo bestimmtes class element finden Java Basics - Anfänger-Themen 1
D Selenium Webdrive get x Element Java Basics - Anfänger-Themen 14
W Element aus HashSet in String umformen Java Basics - Anfänger-Themen 7
S Einfach verkettete Liste Element an bestimmter Position einfügen Java Basics - Anfänger-Themen 24
B Element in Array nach unten verschieben Java Basics - Anfänger-Themen 11
TechGirl JAVA GUI Oberfläche Umkreisung - wie heißt dieses Element? Java Basics - Anfänger-Themen 2
B Methoden Element aus einem Array löschen, Rest nach vorne verschieben? Java Basics - Anfänger-Themen 4
Z Html Element aus der Webseite auslesen Java Basics - Anfänger-Themen 1
A Hash Tabelle Element suchen Java Basics - Anfänger-Themen 1
K Collections Zugriff auf ein bestimmtes Element in der Collection Java Basics - Anfänger-Themen 1
K Element in ArrayList löschen ohne Index zu verschieben Java Basics - Anfänger-Themen 2
J Variablen Strings mit Zeilenumbrüchen in neues Array Element Java Basics - Anfänger-Themen 1
W Größtes Element im unsortierten Binärbaum Java Basics - Anfänger-Themen 7
S Günstigstes Element aus einer ArrayList ausgeben Java Basics - Anfänger-Themen 10
N ArrayList: Das zweite Element wird zur Liste nicht eingefügt nach dem zweiten request. Java Basics - Anfänger-Themen 3
Ruvok Prüfen ob bestimmtest Element existiert im Array Java Basics - Anfänger-Themen 11
F Element aus LinkedList löschen Java Basics - Anfänger-Themen 3
J Element zu jList hinzufügen NullPointerExcepetion Java Basics - Anfänger-Themen 2
H Kein Zugriff auf das Element einer JList möglich: Fehlermeldung Java Basics - Anfänger-Themen 2
V wie kann man am einfachsten für ein Element der JavaFX die Umrandung aktiwieren ? auch ohne css ? Java Basics - Anfänger-Themen 4
D Fehlermeldung "com.element.JavaUpload.Manager" Java Basics - Anfänger-Themen 1
S Element von List<E> in String umwandeln Java Basics - Anfänger-Themen 3
I Element löschen aus der Liste Java Basics - Anfänger-Themen 2
G element in ArrayList Hinzufügen Java Basics - Anfänger-Themen 16
M ArrayList-Element hinzufügen u. löschen Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben