17. oktober 2002 - 12:36
Der er
8 kommentarer
udvælge en del af et resultSet som et nyt resultSet
Er der en måde (metode) hvorpå man kan vælge 1 række fra et resultset og hvor den ene række så også er et resultSet? Det jeg har indtil videre har er: sql="SELECT * FROM tabelnavn"; og jeg får et resultSet res. Nu har jeg så et objekt obj med en masse variabler der skal tildeles værdier ud fra res. jeg kan selvfølgelig lave en ny instans af klasse og sætte variblerne på denne måde: obj.setNavn(res.getString("navn")); Men jeg ville gerne have at det var obj der selv sørgede for at sætte alle dets variabler som fx: objekt.setAtt(en linie af res); og i objekt-klasse er det så: setAtt(ResultSet x) { x.setNavn(res.getString("navn")); } Jeg har overvejet bare at sende hele res med til setAtt-metoden og så pointer der peger på positionen, men der må da være en metode der kan udvælge en række som et nyt resultSet.
Annonceindlæg fra Computerworld
17. oktober 2002 - 12:52
#1
hmmmm, jeg forstår ikke lige helt hvad det skulle gavne. Når du har modtaget et resultset fra databasen, så parse hele sættet og lav f.eks. objekter som du smider på en ArrayList, og luk resultsettet og db forbindelsen igen. Derefter kan du så behandle din ArrayList som du ønsker osv. Det er den løsning jeg har fået mest flexibilitet og performance med.
17. oktober 2002 - 13:04
#2
Det er faktisk dette problem som EJB Entity Bean med CMP løser. Så hvis EJB'er er en mulighed bør du nok gå den vej. Men hvis ikke det er en mulighed, så kan du: 1) Gøre som du selv foreslår og send ResultSet over i en set'er. Det synes jeg ikk eer særlig pænt, men det virker. 2) Lave en setAll med simple argumenter og kald med: setAll(res.getXx("yyy"), res.getZz("www")); Den vill ejeg nok føle mig mere fristet af.
17. oktober 2002 - 13:27
#3
Løsning 2 er klart den pæneste, Men stadigvæk parse dit resultset hurtigst muligt og smid det væk igen. arne:hvis jeg husker rigtigt parser en EJB netop tingene hurtigt og derefter eksekverer de korrekte set/get metoder.
17. oktober 2002 - 13:42
#4
disky: ja og med CMP skal man ikke selv skrive koden.
17. oktober 2002 - 13:57
#5
arne: umiddelbart har jeg ikke mulighed for EJB. Jeg er ikke helt med på hvad du mener med løsning 2. hvor skulle setAll metoden ligge? i obj eller i den anden klasse?
17. oktober 2002 - 14:09
#6
Den skal ligge i det objekt du arbejder på. Det er bare en multi-setter. I.s.f.: void setX(int x) { this.x = x; return; } void setY(int y) { this.y = y; return; } så har du også (altså supplement ikke erstatning): void setAll(int x, int y) { this.x = x; this.y = y; return; } eller (nogle purister foretrækker denne variant): void setAll(int x, int y) { setX(x); setY(y); return; } Bare en pæn måde at strukturere sin kode på.
17. oktober 2002 - 14:29
#7
Så i klasse A siger jeg: få resultSet res lav nyt obj B B.setAll(res.getInt("yyy"), res.getString("www")); Er det sådan du mener?
17. oktober 2002 - 16:14
#8
Ja. Ikke lige hvad du bad om. Men nok den pæneste mulige løsning.
Kurser inden for grundlæggende programmering