Avatar billede dennism Nybegynder
08. november 2006 - 10:00 Der er 12 kommentarer og
2 løsninger

Java: ResultSet længde

Jeg har f.eks. denne mySQL-query:

ResultSet sql = statement.executeQuery("SELECT * FROM races ORDER BY year, num");

Hvordan kan jeg finde ud af, hvor mange rækker den har fundet? Har prøves sql.length(), men det virker ikke.

Håber der er nogen der har en løsning.

Beklager, men har ikke flere point.
Avatar billede thomaskleist Nybegynder
08. november 2006 - 10:15 #1
Prøv det her

int antalrows = statement.executeQuery("Select count(*) from races");
Avatar billede mikkelbm Nybegynder
08. november 2006 - 10:23 #2
Nu returnerer executeQuery jo et ResultSet og ikke en integer, så ovenstående virker ikke. Men man kan gøre følgende:

ResultSet res = statement.executeQuery("Select count(*) as numberOfRows from races");
int numberOfRows = res.getInt ("numberOfRows");
Avatar billede dennism Nybegynder
08. november 2006 - 10:31 #3
Det giver mig et problem. Jeg har:

ResultSet sql = statement.executeQuery("SELECT count(*) as numberOfRows FROM races");
int numberOfRows = sql.getInt ("numberOfRows");
System.out.println(numberOfRows);

Men hvad jeg får returneret er "SQL-error". Hvordan kan det være?
Avatar billede mikkelbm Nybegynder
08. november 2006 - 10:39 #4
Smid en try/catch uden om og kig på den exception der bliver smidt.
Avatar billede dennism Nybegynder
08. november 2006 - 10:55 #5
ResultSet sql = statement.executeQuery("SELECT count(*) as numberOfRows FROM races");
int numberOfRows = sql.getInt ("numberOfRows");

Den sidste linie er skyld i denne exception:
java.sql.SQLException: Before start of result set
Avatar billede mikkelbm Nybegynder
08. november 2006 - 11:00 #6
ResultSet sql = statement.executeQuery("SELECT count(*) as numberOfRows FROM races");
if (sql.next())
{
  int numberOfRows = sql.getInt ("numberOfRows");
  System.out.println(numberOfRows);
}
Avatar billede hacked Nybegynder
08. november 2006 - 14:58 #7
Du kan også gøre det uden brug af count(*):

Statement sql = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
ResultSet resultset = sql.executeQuery("SELECT * FROM races ORDER BY year, num");
resultset.last();
int count = resultset.getRow();
resultset.beforeFirst();
Avatar billede dennism Nybegynder
08. november 2006 - 15:21 #8
malkor >>

Tak for tippet - det var da meget nemmere :)
Hvad gør vi med point her?
Avatar billede hacked Nybegynder
08. november 2006 - 15:52 #9
Del dem imellem dem der har hjulpet :)
Her er et svar fra mig.
Avatar billede mikkelbm Nybegynder
08. november 2006 - 15:56 #10
Om det er nemmere kan så diskuteres!

Og om det kan svare sig at hente så meget data ud i et resultset hvis ikke det data skal bruges til noget synes jeg er overhead!
Avatar billede mikkelbm Nybegynder
08. november 2006 - 15:59 #11
Den sidste sætning blev lidt kryptisk.

Og om det kan svare sig at hente så meget data ud i et resultset hvis ikke det data skal bruges til noget kan også diskuteres. Jeg synes det er overhead!
Avatar billede dennism Nybegynder
08. november 2006 - 16:03 #12
mikkelbm >>
Smider du lige et svar?
Avatar billede mikkelbm Nybegynder
08. november 2006 - 16:06 #13
Ok.
Avatar billede arne_v Ekspert
08. november 2006 - 20:26 #14
14:58:43 skal bruges med en vis forsigtighed

jeg vil bestemt frarade den ved store data maengder

en meget typisk implementering af scrollable result set i JDBC drivere
er at laese alle raekker ind i memory

ikke noget problem med 100 KB data

tungt med 100 MB data

hvis man laver en query vil som regel vaere interesseret i alle raekker, men
det er ikke det samme som at man gerne vil have alle raekker i memory paa samme
tid
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