Melhor forma de buscar dados

5 respostas
C

Boa tarde pessoal,

Gostaria de uma dica de qual a melhor forma de buscar dados em um banco? O cenário é o seguinte: eu estou gerando uma planilha como esta:

Itens 16/ago 17/ago 18/ago 19/ago 20/ago 21/ago 22/ago MÉDIA Item1 99,22 99,18 98,94 99,11 98,98 98,95 99,26 99,09 Item2 99,40 99,43 99,29 99,05 99,52 99,45 98,81 99,28 Item3 99,29 99,33 99,15 99,27 98,99 99,36 99,28 99,24 ... ...

Hoje eu estou buscando item por item no banco e preencho a planilha

select * from itens where item = 'Item1' and dia between '2011-08-15' and '2011-08-23' order by dia

Beleza… está funcionando!!! O problema é que são cerca de 5000 itens no banco… então eu faço 5000 selects !!! Isso gera um certa demora que eu gostaria de resolvê-la!!! O que eu gostaria é de uma dica de como “acelerar” essa busca.

Pensei em fazer apenas um select passando só o dia como parametro:

select * from itens where dia between '2011-08-15' and '2011-08-23'

Eu terei um resultado de cerca de 35000 registro (5000 itens * 7 dias). E depois o que eu faço? Coloco meus 35000 objetos num array/vector/list e afins? E como fazer a busca desses itens dentro dessa list?

Resumindo meu problema… É melhor fazer os 5000 selects e pegar meus dados já arranjados ou fazer apenas um select no banco, colocar os dados numa list e buscar item à item para arranjar em minha planilha? Qual método é mais rápido? Ou tem algum método outro método que eu possa usar?

Obrigado…

5 Respostas

lucasportela

Depende do que você tem que fazer com os seus dados, pela lógica, se conectar com o banco e fazer uma consulta consome muito, ou seja, o ideal é você ir na base uma vez só e fazer tudo o que você tem pra fazer, mas como são 5000 registros e você acha muito grande, então faz de 1000 em 1000.

C

Ok… também acho que ir no banco apenas um vez seja melhor… mas e depois??? Eu busco meus 5000 itens * 7 dias = são 35000 registros… onde eu coloco esses 35000 objetos??? Num vector/list/array ou algo parecido??? e como buscar??? Por exemplo: dentro dos 35000 itens eu tenho 7 “item1”, 7 “item2”, 7 “item3” e assim por diante Como eu busco os 7 “item1” dentro de um vector/list/array???

Obrigado,

C

Ok… também acho que ir no banco apenas um vez seja melhor… mas e depois??? Eu busco meus 5000 itens * 7 dias = são 35000 registros… onde eu coloco esses 35000 objetos??? Num vector/list/array ou algo parecido??? e como buscar??? Por exemplo: dentro dos 35000 itens eu tenho 7 “item1”, 7 “item2”, 7 “item3” e assim por diante Como eu busco os 7 “item1” dentro de um vector/list/array???

Obrigado,

lucasportela

Você vai criar uma classe bean com os atributos da sua tabela,
sei la, classe Registro onde os atributos sao, dia1,dia2,dia3,dia4… getters e setters e o construtor com estes atributos(opicional)…

public class Registro {

    private double dia1;
    private double dia2;
    private double dia3;
    ...
    public double getDia1() { return this.dia1;}
    ...
    public void     setDia1(double v) { this.dia1 = v;}
    ...
    
    public Registro(){}
    public Registro(double dia1, double dia 2...){
        this.dia1 = dia1;
        ....
    }
}

no método da busca, você instância uma lista, adiciona os registros da consulta nessa lista e retorna essa lista no método.

List<Registro> buscaRegistros() {
         List<Registro> lista = new ArrayList<Registro>();
        //consulta...
        while(rs.next()) {
            Registro reg = new Registro();
            reg.setDia1(rs.getDouble("dia1"));
            reg.setDia2(rs.getDouble("dia2"));
            reg.setDia3(rs.getDouble("dia3"));
            ...
            lista.add(reg);
        }
        return lista;
    }

com isso você já tem todos os seus dados carregados, ai teria que iterar sobre a lista e trabalhar com os dados.

for (Registro reg : lista) { if(reg.getDia1 == 98) { System.out.println("OK."); } }

gabiso

Uma sugestão é uma procedure, voce pode criar uma rotina de consulta que gera uma saída com ‘;’
e no java voce faz um stringtokenizer, itera e gera a planilha, se bem que ele vai abrir no excel de qualquer forma.

Criado 23 de agosto de 2011
Ultima resposta 25 de ago. de 2011
Respostas 5
Participantes 3