Problemas com paginacao - urgente - [resolvido]

11 respostas
B

Pessoal estou tentando fazer uma paginação no meu JSP mas nao estou conseguindo…
queria deixar tudo por conta do banco de dados, ou seja… Pegar de 50 em 50 resultados. O banco de dados que estou utilizando é o Oracle…

Tentar usar o ROWNUM foi inutil, pq pegar os 10 primeiros resultados eh facilimo, mas e como faço pra pegar do 11 em diante??

Entende?

SELECT * FROM TESTE WHERE ROWNUM < 50

isso me traz os primeiros 50 resultados… blza… e os proximos 50???

Fiz dessa forma:

SELECT * FROM TESTE WHERE ROWNUM > 50 AN ROWNUM < 100

e é claro que nao funcionou… se alguem ai puder dar uma mao de como fazer??

Brigadao ae pessoal!

:?

11 Respostas

T
SELECT * FROM TESTE WHERE ROWNUM &gt; 50 AN ROWNUM &lt; 100

Foi com "AN" mesmo? AN = artigo "UM", AND = conjunção "E".

B

thingol:
SELECT * FROM TESTE WHERE ROWNUM &gt; 50 AN ROWNUM &lt; 100

Foi com "AN" mesmo? AN = artigo "UM", AND = conjunção "E".

AND

Errei na hora de digitar, nem sei se existe AN no SQL…
hehehe

SELECT * FROM TESTE WHERE ROWNUM > 50 AND ROWNUM < 100

vlw! me da uma luz aeeee :smiley:

W

Cara pra esse tipo de coisa eu sempre crio meus metodos com paginacao, recebendo como paramento numero da pagina e numero de items por pagina, por exemplo:

suponha que vc tenha 3 paginas com 10 items por pagina :

algum metodo do tipo :

public List<Users> getAllUsersPaging(int page, int pageSize) {

   int pag_ini = (page*pageSize)-(pageSize - 1);
   int pag_fim = (page * pageSize);

   // Ai usa como parametros pra query 
   // select * from <tabela> where rownum >= pag_ini and rownum <= pag_fim;

}

O algoritmo ficaria assim :

Pagina 1

pag_ini : (110)-(10-1) = 10 - 9 = 1
pag_fim : (1
10) = 10

pagina 2

pag_ini : (210)-(10-1) = 20 - 9 = 11
pag_fim : (2
10) = 20

pagina 3

pag_ini : (310)-(10-1) = 30-9 = 21
pag_fim : (3
10) = 30

Agora com, 20 items por pagina, por exemplo :

pagina 1

pag_ini : (120)-(20-1) = 20 - 19 = 1
pag_fim: (1
20) = 20

e por ai vai …

//Daniel

B

Ok amigao…
A logica para fazer nao é o problema…
Se tu testar este sql no ORACLE vai perceber que apos a primeira pagina, o SQL nao retorna mais nenhum resultado…

ou seja:

A pagina 1 sempre funciona… com quanto registros eu quiser, o problema é a partir da pagina 2 com o SQL:

SELECT * FROM WHERE ROWNUM >=11 AND ROWNUM <= 50

nao retorna registro nenhum… entendeu?

queria uma ajuda… pq dessa maneira nao funciona…

:smiley:

W

Tenta assim :

SELECT *, rnumber from (
SELECT *, rownum rnumber FROM TESTE
) WHERE rnumber > 50 and rnumber < 100

//Daniel

B

windsofhell:

Tenta assim :

SELECT *, rnumber from (
SELECT *, rownum rnumber FROM TESTE
) WHERE rnumber > 50 and rnumber < 100

//Daniel

Bah cara, nao rolou… ta dando varios erros…
o Sql é esse:

SELECT *, rnumber from (
SELECT *,rownum rnumber FROM FALECONOSCO
) WHERE rnumber > 50 and rnumber < 100

deu “Missing Expretion” e tambem “FROM keyword not found where expected”

não sei pq…
mas nao ta rolando por aqui…
:? :?

Marlon_Meneses

eu faço assim…
coloco todos os registros em uma List ou Vector e entao soh vou manipulando no endereçamento da lista
a logica fica bem mais simples

B

Marlon Meneses:
eu faço assim…
coloco todos os registros em uma List ou Vector e entao soh vou manipulando no endereçamento da lista
a logica fica bem mais simples

sim, mas se o seu resultado pode ser 50 mil registros… isso fica inviavel, é para uma aplicacao grande, nao pra um trabalho do colegio… por isso nao da pra fazer isso.

com 500 linhas o ArrayList ja da estouro de memoria… nao existe essa possibilidade… precisa ser via sql.

C
SELECT * from (
SELECT F.*,rownum rnumber FROM FALECONOSCO F
) WHERE rnumber BETWEEN 50 and 100
Marlon_Meneses

no meu caso eram mais do q 5 mil registros…
sao 26.184 registros
entao eu liste por indice e depois eu paginei …
assim:
no caso foi nome de pessoas, entao fui listando do banco todos com ‘A’, paginei, depois todos com ‘B’, paginei e assim sucessivamente
dependendo do tipo de registro vc poderah usar a mesma logica


B

Feito!
Funcionou gurizada!
brigadao ae!
Deus abencoe a todos!

Criado 13 de outubro de 2008
Ultima resposta 14 de out. de 2008
Respostas 11
Participantes 5