19. juni 2003 - 10:40Der er
8 kommentarer og 1 løsning
Antal rows i ResultSet? (Java og MS SQL server)
Hej
Jeg ønsker at finde ud af hvormange rows jeg har i et ResultSet fra min MSSQL DB og hertil bruger jeg følgende lille stump kode, men jeg får kun en SQLException tilbage hvor der står at ResultSet.beforeFirst er unsupported??? Jeg undre mig fordi kodestumpen virker fint sammen med MySQL? Er der nogen der har en løsning?
public int getRows (ResultSet rs) throws SQLException { try { rs.last(); return rs.getRow(); } finally { rs.beforeFirst(); } }
public void beforeFirst() throws SQLException Moves the cursor to the front of this ResultSet object, just before the first row. This method has no effect if the result set contains no rows.
Throws: SQLException - if a database access error occurs or the result set type is TYPE_FORWARD_ONLY
Så vidt jeg ved kommer det an på din driver, hvilken type det er (tjek på statement.getResultSetType).
Jeg mener ikke der er andre muligheder end at lave en count, selvom det giver et ekstra db-kald.
Bemærk at den for de fleste (alle ?) implementeringer gør det ved at læse alle records op i memory. Ikke noget problem med 100 records. Stort pronlem med 100 millionber records.
De flester laver nok en:
SELECT COUNT(*) FROM ... WHERE ...
til at finde antallet med inden selve queryen.
[ja den kan godt nå at ændre sig mellem de 2 queries, men hvis det f.eks. er til noget plads allokering kan man jo ligge lidt til]
CachedRowSet henter alt data hjem, da den er beregnet til at man kan hente sine data og derefter disconnecte og stadigt arbejde videre med dem. Det kan derfor være et problem hvis man vil hente en million records, afhængigt at størrelsen, så der vil man nok anvende den traditionelle "select * from {tabel} where {query}", men til små forespørgsler er det formodentlig acceptabelt (igen afhængigt at størrelsen af posterne)
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.