E o seguinte tenho
um servlet que faz um select
e retorna por exemplo 200 linhas.
Só que quero trazer apenas 20 quando
clicar em proximo ele vai na mesma servlet
e continua trazendo o trazendo os registros
a partir do que ele parou … ou seja continua a partir
do vigesimo primeiro …
Consegui fazer jogando o ResultSet na sessao
mas quando chega na terceiro proximo
da o seguinte erro:
System or internal error Bad File Descriptor
Valeu …
Se alguem puder ajudar agradeço …
Rafa
Fazer proximo com ResultSet
7 Respostas
Olá,
imagino que exista uma solução mais inteligente do que a minhas mas, mesmo assim vai lá:
No oracle, vc pode usar o ROWNUM da cláusula SELECT (outros bons bancos tbm devem suportar ROWNUM) junto com um contador.
Por exemplo, 20 registros de cada vez:
SELECT *
FROM MY_TABLE
WHERE ROWNUM >= initialRowNum
AND ROWNUM <= finalRowNum
Basta aplicar uma rotina que controle as variáveis initialRowNum e finalRowNum.
Olá.
Descobri que falei bobagem na resposta acima.
Rownum do oracle só funciona se iniciar do 1 (primeira tupla da tabela). Portanto a dica acima não funciona.
Imagino que na API do java deva er algo que faça isto.
No mysql vc pode usar a clásula LIMIT.
Fica:
SELECT *
FROM MY_TABLE
LIMITE initalValue, finalValue
Cara, eu também tenho a mesma dúvida que vc e ainda não descobri como resolver essa questão, que na verdade é essencial… Não acredito que deixar a encargo do Banco de Dados seja boa idéia… na verdade Java deve oferecer recursos pra isso ( várias outras linguagens fornecem ), só precisamos descobrir como.
Se eu descobrir isso te aviso. Se vc descobrir antes, por favor me avise vc.
Atenciosamente,
ALEXANDRE ( J2Alex )
A tabela eh grande? Se nao fosse tao grande eu a colocaria de alguma forma em uma hashtable e manipularia desde entao!
Caso contrario, voce precisaria de uma boa maquina para armazenar tantos registros na memoria!
[]`s
Dalton
Na realidade não importa o tamanho da tabela. Afinal de contas, a partir do momento em que os dados estão em um ResultSet eles já estarão ocupando espaço na memória, guardá-los em uma Hashtable não vai mudar muito a quantidade de memória utilizada.
Só não vejo porque usar uma Hashtable. Qual seria a chave para cada linha? Eu acho que seria mais indicado um Vector. Ainda mais que, com sua implementação baseada em array, o acesso a posições específicas é bem eficiente.
Olá,
encontrei esta TagLib que faz paginação. Imagina que ela aloque todos os registros na memória, ao contrário do que estávamos tentando encontrar mas, já deve servir para os que não estão muito preocupados com a memória.
Pager Tag Lib:
http://www.portaljava.com/home/modules.php?name=Downloads&d_op=getit&lid=194
O que eu falei sobre colocar todos os dados em um Vector não ocupa mais memória está completamente errado. Por favor, desconsiderem.