Ele puxa os dados e começa a carregar isto num arquivo, o problema que chega um determinado tempo ele congela e não anda mais, para de carregar o texto e fica travado.
A consulta é um pouco pesada, mas ela abre normalmente, o problema esta quando fico no while desse resultset carregando o texto
Existe alguma solução para isto? Um querytimeout para resultset talvez?
Mudar o valor do timeout pode resolver o problema a curto prazo, mas vc poderá ter a mesma coisa caso a pesquisa fique ainda maior.
Tente repensar a tua solução.
R
rulexx
Mas ai que ta, a consulta não tem problema, é executada normal
O problema esta quando começo a carregar o txt que eu estou criando.
Olhe por exemplo 1 código:
num_campos = rs.getMetaData().getColumnCount();
while(rs.next()) {
valor = rs.getString(1);
if(valor==null) {
continue;
}
sbLinha = new StringBuilder(valor);
for(i=2;i<=num_campos;i++) {
valor = rs.getString(i);
if(Utilitario.Existe(lista_campos, i)) {
sbLinha.append("\t").append(Utilitario.ConverteUnixtimeDateTime(valor));
} else {
if(valor==null) {
valor = " ";
} else {
pt = Utilitario.Existe(lista_tam, i);
if(pt>-1) {
if(valor.length()>lista_tam[pt][1]) {
valor = valor.substring(0,lista_tam[pt][1]);
}
}
valor = valor.replaceAll("\t", " ");
valor = valor.replaceAll("\r", " ");
valor = valor.replaceAll("\n", " ");
if(Utilitario.Existe(lista_campos_num,i)) {
valor = Utilitario.VerificaValor(valor);
}
}
sbLinha.append("\t").append(valor);
}
}
sbLinha.append("\r\n");
bw.write(sbLinha.toString());
}
Num certo nomento o while trava e não vai pro proximo registro. ( trava no rs.next());
Att
A
alvespintoandre
Onde o seu debug parou?
R
rulexx
exatamente no rs.next() do while
tveronezi
-Depois de quanto tempo o sistema trava? Vc tem dois IO a cada loop: uma chamada ao DB e outra ao arquivo.
-Quantos registros vc espera ter? -> Tente escrever o arquivo em blocos de X linhas.
R
redr4gon
algumas dicas:
limpa seu stringbuilder ao inves de criar um new StringBuilder a cada iteração… cada new em um objeto consome memoria mesmo com a jvm excluindo objetos sem referencia…
usa o newLine do bufferedwriter ao invés de usar sbLinha.append("\r\n")
faz isso: for(i=2;i<=num_campos;i++)
logo no começo… com o valor de i = 0… e se for zero q vc nao quiser nada com a coluna 0; da um continue… desse modo, vc testa se o valor do campo == null em todos os campos
tenta quebrar o arquivo de texto depois de X linhas… pra ver se ele ta gravando certinho e tal… e vai liberando aos poucos pra ver q exata linha e resultSet ele trava… se estiver com pressa de encontrar a solução, divida o arquivo depois de X linhas… assim se o texto ficar muito longe, gera vários arquivos
R
rulexx
tveronezi o pior é que ele nao tem uma regra, a ultima vez travou com meados de 300k de .txt
Não tem um tempo ou quantidade, é aleatorio.
redr4gon valeu as dicas isso melhora o codigo mas esta realmente travando no rs.next