Avatar billede dsj Nybegynder
25. februar 2003 - 21:05 Der er 9 kommentarer og
2 løsninger

Antal tupler i ResultSet

Jeg har i min applikation en JTable, hvor jeg vil præsenterer tuplerne fra et ResultSet. Da JTable bygger på et Object[][] er jeg nødt til at kende antallet af tupler.

Er det anbefalelsesværdigt at gøre følgende:

SELECT COUNT(*) AS antal, navn, osv.. FROM tabel WHERE...

Hvordan bliver denne instruktion udført? Bliver COUNT(*) udført for hver enkelt linie, eller udfører databasen (MySQL og PostgreSQL) det kun én gang?
Avatar billede arne_v Ekspert
25. februar 2003 - 21:12 #1
Hvis du laver sådan en query bliver der kun sendt 1 query til
databasen.

Og normalt vil den være ret optimeret.

Så et kald er ikke et problem.

Hvis den ikke ændrer sig, så bør du lave din kode, så du kun
spørger databasen en gang og gemmer værdien til senere brug.
Avatar billede soreno Praktikant
25. februar 2003 - 21:15 #2
Hvis du kigger i "path\til\jdk\demo\jfc\TableExample" så er der faktisk et eksempel på hvordan man dynamisk kan tilpasse en JTable.
Avatar billede disky Nybegynder
25. februar 2003 - 21:19 #3
Yep det er en rigtig fin måde at gøre det på.
Avatar billede arne_v Ekspert
25. februar 2003 - 21:23 #4
Hvis data er rimeligt små (hvad de sikkert er når de skal i en JTable),
så kan du alternativt åbne ResultSet'et i "både forlæns og baglæns"
mode, fordi så kan du spørge det hvor mange rows der er (gå til sidste
row og hent current row nummer).
Avatar billede magoo20000 Nybegynder
25. februar 2003 - 21:27 #5
arne >> Jeg har aldrig kunne få det ril at virke med JDBC og Access (altså forward og backward)
Avatar billede arne_v Ekspert
25. februar 2003 - 21:29 #6
Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,                                  ResultSet.CONCUR_UPDATABLE);

ResultSet rs = stmt.executeQuery("SELECT * FROM table");

rs.last();
int n = rs.getRow();
rs.first();

Aldrig lav det på store data. Dumme JDBC drivere har det med at ville
læse samtlige rows op i memory, når man laver et scrollable ResultSet.
Avatar billede arne_v Ekspert
25. februar 2003 - 21:31 #7
magoo>

Jeg har aldrig prøvet det med Access.

Det virker fint med f.eks. Sybase.

Jeg er rimeligt optimistisk med at det også virker for MySQL.

Det skal virke ifølge standarden.
Avatar billede _carsten Nybegynder
25. februar 2003 - 21:33 #8
For mig, har det i MYSQL kun været ren succes at bruge rs.last() og rs.firt().
Avatar billede disky Nybegynder
25. februar 2003 - 21:35 #9
Netop pga. de problemmer der kan være med at bruge cursor, eller rs.last() rs.first() er det 'smartest' at bruge en count(*)
Avatar billede dsj Nybegynder
25. februar 2003 - 21:37 #10
soreno, hvis du vil have lidt point må du dumpe et svar; fandt det brugbart med anvendelsen vectorer i JTable :)
Avatar billede soreno Praktikant
25. februar 2003 - 21:38 #11
Ok, det gør jeg så.
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