Bem ants de mais nada gostaria de dizer a todos que venho estudando as APIs do java, mas acredito que minha duvida nao irei encontrr lá. Sejam o codigo abaixo:
if (rs != null) {
while (rs.next()) {
int index = 1;
String segmento = rs.getString(index++);
lista.add(segmento);
}
}
]
Ambos os codigo estao correto e funcionando, minha duvida é: a nivel de performace qual codigo é melhor e a nivel de “limpeza de codigo”, na opnião dos senhores???
Na minha o segundo codigo e mais legivel porem na performace fico na duvida se puderem me ajudar fico grato…
Na minha opnião a primeira opção além de mais legível tbm terá uma melhor performance…
[]'s
davidbuzatto
Cuidado… Se por um acaso do destino rs for null, sua segunda opção vai gerar uma NullPointerException, pois vc tenta usar um método de rs sem antes testá-lo. Inverta a ordem das comparações ( rs != null || rs.next() ). Eu particularmente não gosto desse tipo de estilo. Apesar de este exemplo ser simples ele pode contribuir para um erro difícil de encontrar…
Prefira a primeira opção, pois o teste de rs != null só será executado uma vez e não a cada iteração do loop, além é claro, de ficar mais fácil de ler.
Vc tem um probleminha de lógica ai hein… Cuidado… Declare seu index fora do loop, pois vc está declarando a mesma variável e atribuindo o mesmo valor a toda iteração… Vc sempre vai ler sempre a mesma posição do item do ResultSet… Se sua intenção é essa mesmo (que eu acho provável), vc não precisa declarar uma variável, fazendo apenas rs.getString( 1 ). Usei o 1 pois é ele que de fato está sendo usado na expressão, pois index só vai valer 2 após a execução do método… Operador ++ pós-fixado.
Outro problema, uma hora seu índice vai estourar os limites do result set se vc declarar index fora do loop…
Até mais!
Giulliano
Primeiramente : “a nivel de” é péssimo hein cara…
vc esta pegando os resultsets com um número… ao invés de receber pelo nome do campo…vc ainda pode receber uma exception de ArrayOutOfBound (acessar posição inexixstente do array)…
Dá pra melhorar isso ae na minha opnião…
davidbuzatto
Como uma referência null pode chamar um método de instância? :shock: :shock: :shock:
Depende do caso… O códiglo dele tem um problema de lógica… Vai ficar sempre na coluna de índice 1.
Se ele tiver uma query que retorna um resultado arbitrário? Ele pode até usar o ResulSetMetaData… Ta certo que a coluna está fixa, e é melhor usar o nome da coluna (para efeitos de leitura e entendimento do código)… Mas cada caso é um caso.
reinaldo
Eu imagino que a primeira opção seja a melhor, mais legível e de melhor performance, pois imagine o seguinte:
Na primeira opção seria processado o if (rs!=null) apenas UMA vez.
Na segunda opção o processamento da expressão code[/code] estaria atrelado a ‘N’ vezes dentro do ‘loop’ do ‘while’
Concluindo:
Na primeira opção gasta-se com processamento: 1 esforço de processamento.
Na segunda opção gasta-se com processamento: N esforços de processamento. (claro que, caso tenha dados no seu ‘rs’…)
Acho que é isso… seria interessante testar com dados empíricos, se você tiver a curiosidade de fazer coloque os resultados aqui para a galera…
[]'s
cassio
Giulliano:
Primeiramente : “a nivel de” é péssimo hein cara…
vc esta pegando os resultsets com um número… ao invés de receber pelo nome do campo…vc ainda pode receber uma exception de ArrayOutOfBound (acessar posição inexixstente do array)…
Dá pra melhorar isso ae na minha opnião…
O desempenho tende a ser menor quando se pega os valores pelo nome do campo. Quando você usa indices, o valor é acessado diretamente. Usar o nome do campo exige uma busca sequencial entre todos os valores retornados, até que seja encontrado um como nome especificado.
rolemberg
agradeço pelos varios comentarios que tive neste post, apenas como observação esse codigo não é meu, peguei de exemplo, inclusive é um codigo de onde trabalho, e estou tento muito trabalho para organizar a logica e de como foi usado o comando…