07. december 2001 - 11:35Der 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.
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.
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.
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.
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 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å :-)
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.
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?
hvis du synes jeg skal have point gør du det bare på den måde. husk reference til dette spørgsmål.
Synes godt om
Ny brugerNybegynder
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.