[DUVIDA] Criar Threads com ResulSet (ODBC)

3 respostas
thimor
Ola, Estou realizando essa consulta:
public Collection<ProdutoVO> recuperarProdutos() {
        produtos = new ArrayList<ProdutoVO>();
        Connection conn = AcessaBanco.getInstance().abreConexao();
        String sql = "SELECT DESCRICAO, CDPROD, CFISCAL, UNIDADE, DEPTO, CODBARRA, STCOFINS, STPIS FROM ESTOQUE";
        try {
            st = conn.createStatement();            
            rs = st.executeQuery(sql);
            while (rs.next()) { //Como colocar esse while em por exemplo 5 Threads
                ProdutoVO produto = new ProdutoVO();
                produto.setCodigo(rs.getInt("CODIGO");                
                produto.setDescricao(rs.getString("DESCRICAO"));
                produto.setNcm(rs.getString("CFISCAL"));
                ...
                produto = recuperarDadosSaldos(produto);
                produtos.add(produto);
            }

        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        return produtos; //Tem 20.000 registros aqui 
    }
Eu gostaria de saber como eu faria para colocar o while do comentario em Threads. Trabalhando com JPA conseguimos fazer assim:
q.setMaxResults(batchSize); //Esse metodo achei statement.setFetchSize(int max) ou statement.setMaxRows(int max)
q.setFirstResult(getFirstItem()); //Neste e no proximo é que nao consegui achar similares
return q.getResultList();

Nao consegui encontrar os metodos em Statement nem em ResultSet para quebra o resultado da consulta e colocar as varias partes em 10 Threads por exemplo.

Esse codigo do jeito que esta ai executa em 19 minutos. Gostaria de reduzir o tempo.

Grato a todos desde já

3 Respostas

abelgomes

é veio, não sei qual a urgencia da sua consulta para o usuario, mas vc pode fazer o seguinte, quando o user clicar em procurar, vc starta a thread e libera o sistema pro usuario continuar trabalhando, quando terminar a thread volta a lista pro usuario, mais ai nao sei a sua relidade.

Pode tb limitar mais essa consulta, quem vai analizar 20.000 registros? :S

thimor

abelgomes:
é veio, não sei qual a urgencia da sua consulta para o usuario, mas vc pode fazer o seguinte, quando o user clicar em procurar, vc starta a thread e libera o sistema pro usuario continuar trabalhando, quando terminar a thread volta a lista pro usuario, mais ai nao sei a sua relidade.

Pode tb limitar mais essa consulta, quem vai analizar 20.000 registros? :S

A consulta nao é para ser analisada. eu estou exportando a tabela para um sistema de contabilidade. Entao eu preciso selecionar tudo para depois organizar no layout de exportacao. Entendeu? eu preciso exportar produtos e notas fiscais. So produtos depois de otimizar muito os codigos esta dando 13 minutos. Imagine quando for as notas do mes todo? vai ser 1 dia.

abelgomes

bom nesse caso, de quanto em quanto tempo será feito essa exportação? Pode ser durante a noite?Na hora de exportar de um sistema para outro o usuário não precisa esperar vc pode colocar toda essa fase de adaptação de layouts, consultas, etc dentro da thread e quando terminar exibe uma msg pro usuario. Dados prontos para exportar! Ou algo do tipo. Ou entao agenda pra fazer durante a noite.
Depois de exportar uma vez a tabela completa com 20.000 registros pq nao mandar somente a diferença depois?
abçs…espero ter ajudado.

Criado 27 de abril de 2010
Ultima resposta 27 de abr. de 2010
Respostas 3
Participantes 2