Avatar billede gedebuk Nybegynder
07. december 2001 - 11:35 Der er 17 kommentarer og
1 løsning

Størrelse på ResultSet

Hejsa!

Kan man finde størrelsen på et ResultSet? Jeg er ikke interesseret i at finde ud af, HVAD der ligger i ResultSet\'et, men kun hvor mange rækker det består af.

På forhånd tak.
Avatar billede gedebuk Nybegynder
07. december 2001 - 11:40 #1
Bemærk! Jeg ved godt, at jeg kan starte med at udføre SELECT COUNT (*).... , men jeg vil gerne kunne gøre det i én iteration.
Avatar billede greybeard Nybegynder
07. december 2001 - 12:07 #2
private Resultset rs:
..
..
rs.last();
int noOfRows = rs.getRow() + 1;
rs.first();
Avatar billede disky Nybegynder
07. december 2001 - 12:14 #3
så laver du bare en count(*) sammen med resten af din query, så får du begge dele :)
Avatar billede gedebuk Nybegynder
07. december 2001 - 12:16 #4
Tak for svaret
Avatar billede disky Nybegynder
07. december 2001 - 12:18 #5
jaja hvorfor gøre det let når man kan gøre det besværligt ?
Avatar billede kasseper Nybegynder
07. december 2001 - 12:26 #6
Jeg vil også gi disky ret, det var da en omvej uden lige....
Avatar billede disky Nybegynder
07. december 2001 - 12:29 #7
mange tak kasseper.

Den anden metode virker, men er et hack af dimensioner. og spilder resourcer og cpu tid, hvorimod sql serveren med sikkerhed er langt hurtigere til at gøre det.
Avatar billede gedebuk Nybegynder
07. december 2001 - 12:40 #8
Hej disky!

Så ikke lige dit svar, inden jeg lukkede spørgsmålet.
Det kan vist ikke lade sig gøre at hente count(*) ud sammen med resten af mit query, idet man kun kun kan hente en count(*) ud alene.
Avatar billede greybeard Nybegynder
07. december 2001 - 12:41 #9
Vi er enige om at hvis det kun er antallet, der er vigtigt, klarer SQL-serveren det bedre.
Hvis nu gedebuk f.eks. ønsker at lægge sit resultset i et array, skal ham bruge størrelsen for dimensionere arrary\'et. Så er det her mindre resourcekrævende end at køre to queries.
Avatar billede disky Nybegynder
07. december 2001 - 12:48 #10
gedebuk den holder ikke.

Hvis man har 100 millioner poster i sit resultset, så henter java.sql kun i små bider, så hvis den skal hoppe frem og tilbage, tager det faktisk lang tid og belaster både server og sql mindst ligeså meget som count()

Kun ved små resultset\'s er det en fordel at bruge din metode.

Jeg vil til enhver tid bruge count(*).

Avatar billede greybeard Nybegynder
07. december 2001 - 12:52 #11
Hvis du har 100 millioner poster i et resultset, vil du i hvert fald nok ikke lægge dem i en tabel:-)
Avatar billede kasseper Nybegynder
07. december 2001 - 12:54 #12
det er der da ikke noget underligt i !!!!!
Avatar billede disky Nybegynder
07. december 2001 - 12:54 #13
greybeard: og hvorfor ikke det ?

Forresten er problemmet der også med bare x-antal tusinde poster.

Vi kan godt blive enige om din metode virker, men den er et hack. count() er bedre imho.
Avatar billede greybeard Nybegynder
07. december 2001 - 12:55 #14
Enig. Men det vat det du bad om.
Avatar billede gedebuk Nybegynder
07. december 2001 - 13:07 #15
Hej igen!

Jeg må hellere lige præcisere, hvad det var, jeg ville.
Jeg havde brug for at hente et password ud for en bestemt bruger (SELECT password FROM entabel WHERE username = \'etnavn\')
Hvis denne bruger ikke er oprettet, er ResultSet\'et tomt, hvilket var, hvad jeg ønskede at teste for.
Hvis man prøver at hente noget ud af RS\'et, kaster det en exception. Det kan undgås ved at lave noget som:
if (rs.first())
  // hent passwordet ud fra RS
else
  // lad være med at hente det ud

Som det ses, skal jeg altså bare teste, om RS\'et er tomt.
Håber I bedre forstår grunden så :-)
Avatar billede disky Nybegynder
07. december 2001 - 13:12 #16
så virker den løsning du har accepteret jo heller ikke, da den smider en exception med det samme.

Igen havde en count(*) løst problemmet.

men lige i dit tilfælde er en

if(rs.next())
{
}

bedre.

p.s. Jeg ville dog spørge i databasen direkte efter både username og password, så kan du også samtidigt få sikkerhed ved at MD5 encode dine passwords i basen.
Avatar billede gedebuk Nybegynder
07. december 2001 - 13:21 #17
Hej disky!
Du har ganske ret. Det er nu rettet til rs.next() i stedet. Det gør det lidt pænere og nemmere.
Hvordan kan du få points\'ene af mig? Kan jeg oprette et nyt spørgsmål og så lade dig svare eller hvad?
Avatar billede disky Nybegynder
07. december 2001 - 13:24 #18
hvis du synes jeg skal have point gør du det bare på den måde.
husk reference til dette spørgsmål.
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