Avatar billede eradicator Nybegynder
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.
Avatar billede disky Nybegynder
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.
Avatar billede arne_v Ekspert
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.
Avatar billede disky Nybegynder
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.
Avatar billede arne_v Ekspert
17. oktober 2002 - 13:42 #4
disky: ja og med CMP skal man ikke selv skrive koden.
Avatar billede eradicator Nybegynder
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?
Avatar billede arne_v Ekspert
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å.
Avatar billede eradicator Nybegynder
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?
Avatar billede arne_v Ekspert
17. oktober 2002 - 16:14 #8
Ja.

Ikke lige hvad du bad om.

Men nok den pæneste mulige løsning.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester