Preciso colocar o resultado de uma consulta sql em alguma estrutura, pois preciso fazer alguns cálculos antes de imprimir em uma tabela view. Imaginei que o melhor seria usar uma matriz. Porém como eu vou criar a matriz sem saber o numero de linhas que sera retornado?
Obs:
Uma das possibilidades que pensei era consultar a primeira vez e dentro do while (rs.next) criar um contador… ao final dele eu teria o numero de linhas. ai criaria a matriz depois disso porem teria q consultar o banco de novo, isso parece custoso…
Em vez de uma matriz, use um Collection (como List e seus derivados) e insira os elementos nele no while (next() do resultset). Ao final, todos estarão dentro da lista, e você terá a informação de quantos registros existem.
E como você faria isso em um array? Iria criar um array pra cada coluna da consulta? Cai no mesmo problema.
Se já não está fazendo, é aí que você deve usar classes e objetos. Crie uma classe para representar o tipo retornado na sua query, e insira na lista instâncias dessa classe criadas a partir dessa da consulta. Por exemplo:
class Produto{
int codigo;
String descricao;
float preco;
public Produto(int c, string d, float p){
this.codigo = c;
this.descricao = d;
this.preco = p;
}
}
// mais pra frente
String sql = "select codigo, descricao, preco from produto";
ResultSet rs = executarConsulta(sql);
List lista = new ArrayList<Produto>();
while (rs.next()){
Produto pro = new Produto(rs.getInt(0), rs.getString(1), rs.getFloat(2));
lista.add(pro);
}
// aqui você usa os resgistros em lista.
Obviamente, não serve em todos os casos. E pode ser desnecessário se seu select retorna, por exemplo, apenas 1 registro com uma coluna.
No seu código, você está tentando adicionar o objeto ResultSet rs na lista, enquanto que deveria adicionar instâncias de uma classe que representa os dados retornados, como exemplifiquei anteriormente. Algo como:
// nome exageradamente grande de propósito, pra ser explícito. Sempre ajuste suas classes de acordo
class ResultadoDaConsultaPorDataEVeiculo{
String Veiculos_name_veiculos;
float litros_abastecidos_abastecimento;
float hodometro_abastecimento;
float hodometro_minimo;
public ResultadoDaConsultaPorDataEVeiculo(valores para os atributos aqui){
// preenche os atributos da classe aqui
}
// getters e setters aqui, SE NECESSÁRIO
}
List<ResultadoDaConsultaPorDataEVeiculo > lista_banco_de_dados = new ArrayList<ResultadoDaConsultaPorDataEVeiculo >();
while (rs.next()) {
ResultadoDaConsultaPorDataEVeiculo resultado = new ResultadoDaConsultaPorDataEVeiculo (
rs.getString(0),
rs.getFloat(1),
rs.getFloat(2),
rs.getDate(3),
);
lista_banco_de_dados.add(resultado);
}
// aqui você faz o for, ou o que mais quiser:
for(ResultadoDaConsultaPorDataEVeiculo re : lista_banco_de_dados){
System.out.println(" ");
System.out.println("Linha: " + i);
System.out.println(re.getVeiculos_name_veiculos());
System.out.println(re.getLitros_abastecidos_abastecimento());
// outros campos
}