Ausgabe unterschiedlicher Inhalte

pjohm

Mitglied
Servus zusammen,
ich bin neu hier und benötige direkt eure Hilfe.

Ich habe folgendes Problem:
Für eine Projektarbeit soll ich eine Lagerübersicht aus einer SQL-DB erstellen, d.h. zuerst soll das Lager ausgegeben werden, und darunter die Lagerfächer des jeweiligen Lagers. Wenn ein Lager mehrere Lagerfächer hat, sollen diese alle unter dem Lager ausgegeben werden, und dann weiter zum nächsten Lager,also in etwa so:

Lager1 || Ort1 || PLZ1
Lagerfach1
Lagerfach2
Lagerfach3
Lager2 || Ort2 || PLZ2
Lagerfach4
Lagerfach5
usw.

Meine Ausgabe sieht im Moment leider in etwa so aus:
Lager1 || Ort1 || PLZ1
Lagerfach1
Lager1 || Ort1 || PLZ1
Lagerfach2
Lager1 || Ort1 || PLZ1
Lagerfach3
usw.

Hier mein Code, irgendwie will das nicht so wie ich will:(
Vielleicht erkennt ihr ja woran's liegt.
Java:
try {            Statement stmt;
            stmt = con.createStatement();
            ResultSet rs;
            rs = stmt
                    .executeQuery("SELECT * FROM Lager LEFT JOIN Lagerfach ON Lager.LagerNr=Lagerfach.LagerNr");


            while (rs.next()) {
                System.out.println(rs.getString("Lager.LagerNr")+ " "+rs.getString("Ort")+" "+rs.getString("PLZ")+"\n   "+rs.getString("LagerfachNr")+", Gangnr.:"+rs.getString("GangNr")+", RegalNr.:"+rs.getString("RegalNr")+", mit: "+rs.getString("Volumen")+" cbm."  );
                int lnr=rs.getInt("Lagerfach.LagerNr");
                if(lnr!=rs.getInt("Lagerfach.LagerNr")+1){
                    
                    System.out.println(rs.getString("LagerfachNr")+", Gangnr.:"+rs.getString("GangNr")+", RegalNr.:"+rs.getString("RegalNr")+", mit: "+rs.getString("Volumen")+" cbm.");
                }
                
                
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }

Danke schon mal
pjohm
 

pjohm

Mitglied
Danke für die schnelle Antwort.
Hab das gerade probiert, aber hilft leider nicht. Wenn ich das über die Spalten Lager.LagerNr, Ort, PLZ gruppiere, dann wird je Lager immer nur noch das erste Lagerfach angezeigt.
 

strußi

Top Contributor
zeile 9 wird immer ausgegeben, du kannst mit einer if-abfrage testen ob dein String ein lager oder ein lagerfach ist. wenn es ein lager ist, dann gib das lager aus, sonst das lagerfach
Java:
while( rs.next()){
 String firstCol =rs.getNString( 1);
        if( !firstCol.contains( "fach")){
            //lager ausgeben
        } else{
            //lagerfach ausgeben
        }
}
so sollte es gehen
 
Zuletzt bearbeitet:

pjohm

Mitglied
Hi
Danke, aber leider funktioniert das auch nicht. So wird mir
Lager1
Lagerfach1
Lager1

Lager1
Lagerfach2
Lager1
usw.

ausgegeben.

Wenn ich Zeile 9 auskommentiere werden mir nur die Lager ohne Fächer ausgegeben, allerdings auch doppelt und dreifach.
 
Zuletzt bearbeitet:

strußi

Top Contributor
du brauchst eine abfrage, die testet, welchen inhalt dein aktuelles rs.next() hat, wenn es ein lager ist, die lager ausgabe, wenn es ein lagerfach ist, die lagerfachausgabe.
 

pjohm

Mitglied
ja, aber das problem ist, dass mir dann alle lager nacheinander ausgegeben werden. außerdem sind immer noch die duplikate drin.

mein gedanke war, das über die lagernummer zu machen, da die ja in beiden tabellen hinterlegt ist.also die lagernummern zu vergleichen, und wenn die gleich sind, dann sollen die lagerfächer dazu ausgegeben werden. aber das funktioniert leider auch nicht so wie ich mir das gedacht hab.
 

strußi

Top Contributor
wie sieht überhaupt der inhalt von rs.next() aus? wenn du den mal zeigen könntest, kann man anhand der daten sich überlegen wie man es ausgeben könnte
 

pjohm

Mitglied
attachment.php

Das ist der Inhalt vom ResultSet. Lagernummer kommt zwei Mal vor, einmal als Primärschlüssel in der Tabelle Lager, und als Fremdschlüssel in Lagerfach.

Und das Ziel ist es, dass jedes Lager nur einmal angezeigt wird, aber dazu jedes Lagerfach ausgegeben wird.

Also z.B.
1 | Ulm | 89075
UL105 | 1 | 5 | 1.50
UL203 | 2 | 3 | 2.10
 
Zuletzt bearbeitet:

Neue Themen


Oben