[RESOLVIDO] Geração de arquivo texto incompleto

Pessoal, assim.

Estou gerando um arquivo texto baseado numa consulta ao banco de dados. Esse arquivo texto é um layout que precismaos enviar para o ministério da saúde.
Porém, como são muitos registros (o arquivo final ficará com cerca de 800KB de texto) a operação não é completada.

O arquivo simplesmente para num ponto e na mensagem de expection simplesmente aparece null. (Estou gerando isso apartir de uma jsp).

Segue trecho do código responsável pela escrita:

while(rsC2.next()){
       for(int i=1;i<=20;i++){ 
           wrt.write(rsC2.getString(i));
       }
       wrt.flush();
       Arquivo.novaLinha(wrt);
}
rsC2.close();

rsC2 e o resultset que faz a consulta ao banco, o mesmo possui 20 campos.

e wrt é um objeto do tipo Writer que “escreve” no arquivo.

o java possui algum limite máximo para geração de arquivos ou algo assim?

De maneira alguma, o que pode estar acontecendo é que simplesmente o final do ResultSet é atingido. Uma dica: chame o flush somente após escrever tudo o que você precisa.

Inicialmente eu estava fazendo assim, porém eu tentei chamar o flush a cada linha para ver se mudava alguma coisa.

E o fim do resultSet não deveria ser o fim de todos os registros?

Pergunto isso porque esse trecho está caindo na Exception, no meio do processo. A query retorna aprox 2500 linhas e esse erro ocorre por volta da linha 800.

E o mais estranho é que o getMessage da Exception retorna null.

Apenas mais um detalhe.

Limitei o SELECT (que é feito em base ORACLE) para retornar somente 350 linhas.

Aí funcionou perfeitamente.

Os ResultSets tem um limite máximo de registros?

Pessoal estive procurando a respeito e não encontrei nada referente aos ResultSets terem um limite de registros.

Alguém saberia me informar se há algo assim?

Porque como disse antes, limitei o numero de linhas apenas para teste. Porém eu preciso trabalhar com todos esses dados juntos, de forma a gerar um arquivo txt com os mesmos.

Se alguém souber aí, da uma força.
Vlw.

Sugestões:

  • Tentar encontrar um padrão, verificar se sempre está parando no mesmo ponto (você já citou que é aproximadamente na linha 800);
  • Se sim, verificar se não tem nenhum valor inválido em algum campo;
    Uma das possibilidades é de que o campo está com valor NULL (dirty), na primeira ocorrência está causando exception no write (que causa NullpointerException porém o getMessage = null)
String campo;
while(rsC2.next()){
       for(int i=1;i<=20;i++){ 
           campo = rsC2.getString(i);
           if(campo != null)
                wrt.write(campo);
           else 
                wrt.write("*** valor NULL ***"); // ou o que achar melhor
       }
       wrt.flush();
       Arquivo.novaLinha(wrt);
}
rsC2.close();

Cara, era isso aew msm.

Um campo estava vindo como null.

Vlw pela idéia.

Até, abraço.