Cara, vc está tentando guardar mais de 1 milhão de rows em um result set… Imagina quanto isso num vai ocupar de memória! Inviavel! Veja outro jeito de fazer isso! Se quiser te ajudo…
Mas ta dando daileon.JaspionException porque é erro durante a execução que está consumindo memória demais!
Abraço
marcos.junqueira
cara, que loucura!!!
Tem certeza de que essa é a única maneira de se fazer isso??
já tentou fazer join ou então usar LIMIT OFFSET???
Tudo isso ai depende do que vc vai fazer?
Pegue do banco apenas coisas q vc vai utilizar, assim vc economiza recursos…
Guilherme_Gomes
Verdade, num pensei nisso!
Usa uns joins pra fazer a comparação direto, se for possivel no contexto do seu projeto…
Se não for, vai ter que arranjar outra solução… que um result set deste tamanho é inviavel cara… Péssimo!
Outra coisa, se for viavel, da uma olhada em stored procedure, assim vc deixa a execução pro BD e tira a carga do seu programa. Da uma pesquisada nisso se vc achar que é o caso!
raci0nal
hawhahawhwa
C
cristian_munhoz
Pessoal eu concordo plenamente com vcs eu tb achei uma loucura, mas não consegui pensar em outro jeito, nessa tabela são guardados codigos de encerramento e eles são unicos não se repetem, entao acontece que pela regra de negocio eu preciso verificar nesse tabelão se os codigos já existem, caso contrario vou inserir os codigos novos em uma tabela temporaria.
Pensei na seguinte logica em fazer dessa forma o que vcs acham.
Eu carrego um ResultSet com os codigos a serem verificados
e dentro de um while em tempo de execução eu crio um outro result buscando o valor corrente com a clausula WHERE passando o valor corrente resulset.next() concatenado com WHERE, acho que funciona, ficou meio complicada a explicação porque agora mesmo que tive essa ideia, vou fazer uns testes e se funcionar eu posto o codigo ok, e com isso se vc puderem me ajudar se alguém tiver uma ideia melhor que não consuma tanta memoria…rsss
Agora que é uma ideia maluca isso até eu sei…heheheh, mas valeu galera
Um abraço
Cristian
T
thingol
Guilherme Gomes:
Cara, vc está tentando guardar mais de 1 milhão de rows em um result set…
Se o ResultSet for “forward only”, não se gasta memória nem no cliente nem no servidor, porque o ResultSet é um simples cursor nesse caso.
Não a li, mas talvez trocar o JDBC possa ser uma solução.
Não sei se estou enganado, mas o padrão de um ResultSet já é “forward only” e pelo visto ele criou um RS padrão e o erro ocorreu.
T
thingol
Digamos que o tal código de encerramento esteja na coluna COD_ENCERRAMENTO e que eles sejam numéricos e seqüenciais. Se seu banco não está usando um gerador de seqüências (SEQUENCE no Oracle) ou esse campo não é um UID (no caso do SQL Server), então você pode fazer daquele jeito porco e imundo:
para obter um novo código de encerramento. O problema do MAX é que, se houver várias transações simultâneas, você pode ter problemas com esse comando, mas se for algo bobo que apenas seu programa mexe, então esse comando é perfeitamente licito.
raci0nal
Não sei se eu entendi direito, mas você só precisa saber se um código existe antes de inserir em uma tabela?
Coloque o campo do código como único na sua base de dados. Se tentar inserir e o código já existir será disparado um erro.
Aí você pode tratar este erro.
maquiavelbona
Se esse campo único for uma sequence, mais mamão com açúcar. É só recuperar o próximo valor da sequence antes de inserir. E se não estiver usando, considere fortemente começar a usar.