Gå til innhold

JSP, Oracle og paging av recordsets


Anbefalte innlegg

Heisann,

 

poster spørmsålet mitt i Java-forumet siden jeg ikke fant et eget forum om JSP(Java Server Pages).

 

Er det noen av dere som har noen gode løsninger på paging av store recordset( >100000 poster) i en Oracle (versjon 8.1.0.7) database? Å page et recordset er ikke noe problem, men løsningen jeg har foreløbig går ut på å hente ut alle postene fra databasen for så liste ut de jeg spesifikt vil vise på websiden. Er det noen muligheter for å be databasen kun hente ut en viss porsjon av databasen (Jeg søkt både på sun sitt Java forum og generelt på Google, men har ikke kommet frem til noen gode metoder)?

 

Noen som har hatt lignende problemstilling og er villig til å dele sine erfaringer med dette?

 

mvh

dacourt

Lenke til kommentar
Videoannonse
Annonse

Dette må du vel gjøre i SQL-setningen. Å hente ut så store datamengder tar TID og krever ressurser, derfor bør man spesifisere hvilke data man vil ha ut i spørringen istedet for å hente ut alt, og så velge ut de data som trengs i Java/JSP (men spørs jo litt hvordan du tenker å gjøre ting her, finnes vel unntak).

 

Er litt usikker på hva du mener med å hente ut en porsjon av databasen. Mener du poster som tilfredsstiller de kriterier som du vil ha ut? Eller hele deler av databasen? Uansett så må dette spesifiseres i SQL-setningen. Gi oss et eksempel så blir det lettere å forstå hva du mener.

Lenke til kommentar

Heisann,

 

Vel la oss si (hypotetisk) du på en side vil vise en list over brukere, men du vil kun vise 10 brukere per side (et veldig forenklet eksempel):

 

sql = SELECT * FROM users ORDER BY name ASC;

 

//Setter cursoren til å starte på rekkenummer startside

RS.aboslute(startside)

 

While (RS.next() && count < antall visninger per side)

Skriv ut brukeren;

count++;

)

 

Problemet med denne koden er at recordsettet vil inneholde alle oppføringene i users-tabellen. Så det jeg spør etter er om det er måter i Oracle (store procedure o.l) som kan hente ut post 0-10, 11-20, 21-30 osv uten å gi tilbake hele recordettet samtidig?

 

mvh

dacourt

Lenke til kommentar

Tror jeg vil anbefale pl/sql der. Da kan du lage en prosedyre som tar imot et atributt - startNr

Prosedyren kan kjøre select på en og en rad 10 ganger og returnere de ti radene. Hvilken rad den skal starte på bestemmes av atributtet startNr.

Hvis startNr = 0, hent 0-9

Hvis startNr = 10, hent 10-19

osv...

 

edit: dette blri jo databaseprogrammering, og ikke jsp/java, men har du muligheten/kompetansen så er databasen sinnsykt mye raskere enn java + at du sparer mye belastning på internett

Lenke til kommentar

Det går fint ann å gjøre det som enden sier. Det negative med dette er at det bare fungerer på oracle-databaser, men dette er kanskje ikke noe problem i ditt tilfelle. I tillegg så har jeg aldri likt PL/SQL noe særlig....av den ekle grunn at jeg var elendig i det :D men det er absolutt en mulighet.

Lenke til kommentar
Det går fint ann å gjøre det som enden sier. Det negative med dette er at det bare fungerer på oracle-databaser, men dette er kanskje ikke noe problem i ditt tilfelle. I tillegg så har jeg aldri likt PL/SQL noe særlig....av den ekle grunn at jeg var elendig i det  :D men det er absolutt en mulighet.

 

Ja det var jo egentlig dette jeg hadde kommet frem til også. Holder på med en prosedyre nå som forhåpentligvis virker som den skal etterhvert.

 

Er ikke noen kløpper i PL/SQL jeg heller, men med en porsjon cola-light og et par banneord så går det meste når en programmerer :)

 

dette blri jo databaseprogrammering, og ikke jsp/java, men har du muligheten/kompetansen så er databasen sinnsykt mye raskere enn java + at du sparer mye belastning på internett.

 

Ja du har helt rett. Var forsåvidt ikke et Java-spørsmål i det hele tatt. :roll: Skal du programmere store databasesystem som jeg holder på med nå så bør en alltid tenke på å la databaseserveren ta seg av så mye load som mulig ja.

 

mvh

dacourt

Lenke til kommentar
Det går fint ann å gjøre det som enden sier. Det negative med dette er at det bare fungerer på oracle-databaser, men dette er kanskje ikke noe problem i ditt tilfelle. I tillegg så har jeg aldri likt PL/SQL noe særlig....av den ekle grunn at jeg var elendig i det :D men det er absolutt en mulighet.

 

Sorry, men det ser ut til å være hull i minnet ditt når det gjelder bruksområder for pl/sql. Det virker fint i andre databaser og!

Skjønner godt at du ikke liker det. Sitter og leser på db200 nå. Må konte 30. jul... Festlig sommerferie..?

Lenke til kommentar

PL/SQL er Oracle sitt eget "språk", og det fungerer så vidt jeg vet kun på Oracle sine databaser, muligens noen andre også, men dette vet jeg ikke noe om. Andre databaser har lignende språk (med unntak av noen), men det er ikke noen standard som gjøre de forskjellige språkene brukbare på andre DB-systemer enn det de er laget for. Dette er det jeg har HØRT, har aldri prøvd. Er ganske sikker på Erling Andreassen sa dette i en forelesning en gang, men skal ikke vedde skalpen min på det.

Lenke til kommentar
pg'n var så lett at jeg er litt irritert over 1.5 ;)

Prog er stort sett greit, for det sitter i fingrene.

 

Begynner å bli rimelig off-topic her nå, men gratulerer så mye med 1.5 :)Du kan vel ikke at klage på den karakteren?

 

mvh

dacourt

Lenke til kommentar
Åja, vi drev jo å snakket om noe her :)

Har du fått til?

 

:)

Er ikke ferdig enda nei, men kommer ikke til å stresse med det nå. Har andre ting som må implementeres først. Optimaliseringen kan gjøres etterpå.

 

mvh

dacourt

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...