[RESOLVIDO] Geração de arquivo texto incompleto

6 respostas
jks1903

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?

6 Respostas

rmendes08

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.

jks1903

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.

jks1903

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?

jks1903

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.

jamirdeajr

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();
jks1903

Cara, era isso aew msm.

Um campo estava vindo como null.

Vlw pela idéia.

Até, abraço.

Criado 26 de abril de 2011
Ultima resposta 28 de abr. de 2011
Respostas 6
Participantes 3