Bom dia.
Estou realizando uma consulta no meu banco de dados Oracle, em uma tabela que tem aproximadamente 100.000 linhas.
Preciso que a cada 10 linhas (exemplo) retornadas do meu select, a tabela crie estas 10 linhas com os respectivos dados recebidos.
Por que isso?
Porque não consigo guardar todas as linhas retornadas do select para depois popular a tabela. Não consigo porque estoura a exceção “Java heap space”.
Acredito que se eu locar mais espaço para a minha JVM o problema não aconteça, porém isto seria uma solução temporária.
Resumindo: Preciso que a cada 10 linhas, por exemplo, que o banco me retorne, a tabela seja populada.
Se há alguma implicação nisto, ou não é a melhor forma de implementação neste caso, deixem suas considerações.
Espero ter sido claro.
Agradeço desde já.
Abraço!
Vc ja avaliou todas as possibilidades de vc não precisar trazer esse 100.000 registros por select ?
Como vc armazena os resultados do select ?
Da uma olhada em paginação:
http://www.mhavila.com.br/topicos/bd/ora_rownum.html
Estou percorrendo todas as linhas encontradas no select e armazenando em um ArrayList.
Desta forma:
ArrayList<TABELA> tab = new ArrayList<TABELA>();
while (result_set.next())
{
tab.add(new TABELA(result_set.getString("Coluna1"), result_set.getString("Coluna2")));
}
Com isso, cada posição do meu array terá uma estrutura TABELA alimentada com o valor de cada coluna.
Abraço!
Quero fazer com que TODAS as linhas retornadas da consulta, sejam mostradas na tabela.
Ou seja, se a consulta me retornou 99.000 linhas, a minha tabela terá 99.000 linhas.
Mas quero que estas linhas vindas da consulta, venham em blocos por exemplo de 10 linhas por vez.
Então, a cada 10 linhas retornadas da consulta, são mostradas 10 linhas na minha tabela de visualização na aplicação.
Logo em seguida, mais 10 linhas são retornadas da consulta e mais 10 linhas são mkostradas na minha tabela de visualização na aplicação.
Ficará fazendo isso até atingir a minha linha de número 99.000
Não sei se fui claro!
Abraço!
[quote=criador]Quero fazer com que TODAS as linhas retornadas da consulta, sejam mostradas na tabela.
Ou seja, se a consulta me retornou 99.000 linhas, a minha tabela terá 99.000 linhas.[/quote]
Para tanto você precisaria alocar os 100 mil registros na memória, o que lançaria uma erro.
[quote=criador]Mas quero que estas linhas vindas da consulta, venham em blocos por exemplo de 10 linhas por vez.
Então, a cada 10 linhas retornadas da consulta, são mostradas 10 linhas na minha tabela de visualização na aplicação.
Logo em seguida, mais 10 linhas são retornadas da consulta e mais 10 linhas são mkostradas na minha tabela de visualização na aplicação.[/quote]
Esse é o princípio de paginação. Agora pense: se você vai mostrar apenas 10 registros para que fazer um select dos 100 mil? Faça selects e vá usando o comando SQL “LIMIT” em cada um deles. Ou seja: selecione os 10 primeiros e mostre. Depois, caso o usuário clique no botão próximo, selecione os próximos 10 e mostre e assim por diante.