1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Problema ao mostrar dados que estão sendo gravados no Banco num ProgressMonitor.

Boa tarde galera, estou com um problema na minha aplicação que não estou conseguindo resolver. É o seguinte: Estou desenvolvendo uma aplicação que pega os registros de um arquivo de texto e grava-os num Banco de Dados. Como a quantidade de registros do arquivo é muito grande (ordem de Milhares), essa operação demora muito tempo pra ser realizada, resolvi então usar um ProgressMonitor para informar ao usuario o andamento da tarefa. Quero mostrar nesse monitor, os registros que estão sendo gravados no banco em tempo real e atualizar a barra de progresso no mesmo instante. A barra esta funcionando beleza, mas no monitor só esta mostrando o ultimo registro gravado repetidas vezes de acordo com o numero de linhas do arquivo. Pelo que tive analisando, acredito que seja erro de lógica, no entanto não estou conseguindo resolver. Alguém ai poderia me ajudar ? Grato !

Codigo de leitura do arquivo e inserção dos dados no banco

public class TesteInsereArquivo {
    String dados;
    RegistroClimaBean registroBD = new RegistroClimaBean();
    Registro registro = new Registro();
    //criando uma lista de registros e instancia como ArrayList
    List<Registro> listDados = new ArrayList<>();

    public List<Registro> listDados() {       
        FileInputStream stream = null;
        try {
            ContaLinhas contaLinhas = new ContaLinhas();
            String caminhoArquivo = "D:/DADOS.TXT";
            stream = new FileInputStream(caminhoArquivo);
            InputStreamReader reader = new InputStreamReader(stream);
            BufferedReader br = new BufferedReader(reader);
            String linha = br.readLine();
            //Objetos de formatação da data
            SimpleDateFormat formatadorDMY = new SimpleDateFormat("dd/MM/yyyy");
            SimpleDateFormat formatadorHMS = new SimpleDateFormat("HH:mm:ss");
            //Inserindo no banco de dados

            // grave nessa conexao!!
            AdicionaRegistroDAO dao = new AdicionaRegistroDAO();

            //Chamando o metodo que conta as Linhas do Arquivo e imprime-as
            int linhas = contaLinhas.contaLinhasArquivo(caminhoArquivo);
            System.out.println("Numero de Linhas do Arquivo: " + linhas);

            //Lendo e Inserindo registros no Banco de Dados
            while (linha != null) {
                if (linha.equals("")) {
                    //Lendo a proxima linha
                    linha = br.readLine();
                    continue;
                }
                String[] itens = linha.split(",");

                String data = itens[0];
                //Convertendo de String para Date
                Date dataf = formatadorDMY.parse(data);
                //Convertendo para o tipo sql.Date (formato: yyyy-MM-dd)
                java.sql.Date dataSql = new java.sql.Date(dataf.getTime());

                String hora = itens[1];
                //Convertendo de String para Date
                Date horaf = formatadorHMS.parse(hora);
                //Convertendo para o tipo sql.Time (formato: HH:mm:ss)
                java.sql.Time horaSql = new java.sql.Time(horaf.getTime());

                String temperatura = itens[2];
                String umidade = itens[3];

                //System.out.println(listDados);
                //Lendo a proxima linha
                linha = br.readLine();

                registro.setData(data);
                registro.setHora(hora);
                registro.setTemperatura(temperatura);
                registro.setUmidade(umidade);

                listDados.add(registro);
                /*Obs: não estou ainda gravando no banco, estou apenas testando
                pra ver se as linhas que serão inseridas aparecerão no Monitor*/                                

            }
        } catch (FileNotFoundException ex) {
            Logger.getLogger(TesteInsereArquivo.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(TesteInsereArquivo.class.getName()).log(Level.SEVERE, null, ex);
        } catch (ClassNotFoundException | ParseException ex) {
            Logger.getLogger(TesteInsereArquivo.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            try {
                stream.close();
            } catch (IOException ex) {
                Logger.getLogger(TesteInsereArquivo.class.getName()).log(Level.SEVERE, null, ex);
            }
        }                
        return listDados;
    }   
}

Parte do codigo do Monitor que mostra os dados que estao sendo inseridos

public void propertyChange(PropertyChangeEvent evt) {
        TesteInsereArquivo arquivo = new TesteInsereArquivo();
        List<Registro> ListDados = arquivo.listDados();
        if ("progress" == evt.getPropertyName()) {
            int progress = (Integer) evt.getNewValue();
            progressBar.setValue(progress);
            taskOutput.append(String.format(ListDados.toString(), task.getProgress()));
        }

    }
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

0 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags java swing threads ou faça a sua própria pergunta.