SQL ResultSets verschachteln

Status
Nicht offen für weitere Antworten.

guni

Bekanntes Mitglied
Hallo,

ich möchte SQL-ResultSets verschachteln.

konkret schaut das so aus:

ich habe eine Tabelle Berechtigungen der Form:

Mitarbeiter: Rolle
----------------------
Mitarbeiter1: Rolle1
Mitarbeiter1: Rolle3
Mitarbeiter2: Rolle1;
Mitarbeiter2: Rolle3;
Mitarbeiter2: Rolle4;
Mitarbeiter2: Rolle5;
Mitarbeiter2: Rolle7;

Ziel ist, eine HashMap<String, LinkedList> zu erhalten:

Mitarbeiter1 -> [Rolle1, Rolle3]
Mitarbeiter2 -> [Rolle1, Rolle3, Rolle4, Rolle5, Rolle7]

also hab ich einfach sowas geschrieben:

Code:
ResultSet r1 = executeQuery("SELECT mitarbeiter FROM berechtigungen GROUP BY mitarbeiter");
while (r1.next()) {
    name = r1.getString("mitarbeiter");
    ResultSet r2 = executeQuery("SELECT rolle FROM berechtigungen WHERE mitarbeiter = '"+name+"'");
    while(r2.next()){
        linkedList.add(r2.getString("rolle"));
    }
    hashMap.put(name,linkedList);
}

so ... mein Problem der ganzen Sache ist, dass sich die ResultSets irgendwie "in die Quere zu kommen scheinen" ...
sobald ich r2 initialisiere gibt es kein r1.next() mehr.

woran kann das liegen?
kann man resultsets nicht verschachteln?
wie könnte man dieses Problem sonst lösen?

lg, guni
 
S

SlaterB

Gast
du brauchst unterschiedliche Statements von der Connection,
pro Statement maximal ein ResultSet
 

guni

Bekanntes Mitglied
hey! danke für die schnelle Antwort!
passt! dann kann ich das also doch lösen ;-)
 
S

SlaterB

Gast
deine Anfrage sieht übrigens so aus, als wenn du eh alle Elemente aus Berechtigungen genau einmal brauchst,
dafür musst du nicht zig Anfragen stellen, lade einmal die Tabelle bzw die Kombination rolle + mitarbeiter, evtl. sortiert nach mitarbeiter
und dann kann du in Java die Daten zurechtordnen
 

guni

Bekanntes Mitglied
hmm ... meinst du, ich soll mir vorher die komplette tabelle in eine HashMap speichern und meine "SELECTS" dann auf java-Ebene in der hashMap durchführen?!?!?! welchen vorteil hätte das? oder hab ich dich da falsch verstanden?!
 
S

SlaterB

Gast
du sollst die Daten laden, sie einmal durchlaufen, zu jedem Eintrag über den Namen die passende Liste aus der Map holen und da die Rolle eintragen,

> "SELECTS" dann auf java-Ebene in der hashMap durchführen
klingt etwas komisch, aber vielleicht meinst du das gleiche


Vorteil? je nach Anzahl der DB-Anfragen unendlich schneller,
eine DB-Anfrage statt vieler ist meist besser, besonders wenn man noch WHERE oder GROUP BY weglassen kann
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben