Tamanho de um ResultSet  XML
Índice dos Fóruns » Java Básico
Autor Mensagem
Rafael Afonso
Virtual Machine Man
[Avatar]
Membro desde: 05/12/2002 16:03:43
Mensagens: 719
Localização: São Paulo/SP
Offline

Olá:

Estive dando uma olhada na API da java.sql.ResultSet e reparei que não há nenhum método que retorna o tamanho desta, ou seja, quantas linhas obtive da query. Obviamente posso correr por todo o ResultSet até o final com um contador e depois contar quantas linhas obtive. Creio que ficaria assim:

Mas como determinar a priori? Será que isso depende da implementação de cada driver?

Grato,

Rafael Ubiratam Clemente Afonso
---------------------------------------
GitHub
ScalaFX
LinkedIn
[MSN]
cv
Moderador
[Avatar]

Membro desde: 04/04/2003 00:32:12
Mensagens: 7842
Localização: São Paulo, SP
Offline

Rafael Afonso wrote:Será que isso depende da implementação de cada driver?


Acertou

Alguns bancos não tem como saber o número de registros retornados em um ResultSet devido a otimizacoes feitas no driver (é meio 'caro' saber o tamanho de um ResultSet às vezes). Mas, se vc está iterando sobre o ResultSet de alguma maneira, aproveite pra usar um contador, ou então faça dois SELECTs, um pra pegar os dados e outro com um count().
[Email] [WWW] [Yahoo!] [MSN] [ICQ]
Rafael Steil
Administrador
[Avatar]

Membro desde: 31/08/2002 02:35:53
Mensagens: 5984
Localização: São Paulo
Offline

Eu tava fazendo uns testes com isso esses tempos, e



foi um pouco mais rapido que o loop while().

Rafael

"working code attracts people who want to code. Design documents attract people who want to talk about coding - Charles Miller"

http://rafaelsteil.com
http://twitter.com/rafaelsteil
http://www.jforum.net
http://www.flickr.com/photos/rafaelsteil
[Email] [WWW]
Rafael Afonso
Virtual Machine Man
[Avatar]
Membro desde: 05/12/2002 16:03:43
Mensagens: 719
Localização: São Paulo/SP
Offline

Rafael Steil wrote:
Eu tava fazendo uns testes com isso esses tempos, e



foi um pouco mais rapido que o loop while().

Rafael

E aí não precisa fazer duas queries: uma com o count(*) e outra para obter as linhas.

Rafael Ubiratam Clemente Afonso
---------------------------------------
GitHub
ScalaFX
LinkedIn
[MSN]
CLAUDIO GUALBERTO
JavaGuru

Membro desde: 29/09/2002 00:22:27
Mensagens: 217
Localização: Uberlândia-MG
Offline

É... mas para isso funcionar vc deve usar um Statement rolável
o q é muito caro em termos de instanciação.
Sei que existem situações onde queremos saber o tamanho do ResultSet, mas no mundo real o que se faz é popular um ArrayList com as linhas, e como na maioria das vezes nós adicionamos TODAS as linhas do ResultSet, basta usar o metodo size após popular o ArrayList.
Parece meio bobo, mas faz uma boa diferença entre Statement's simples e Statement roláveis no quisito desempenho e uso de recursos.
É claro que usando ou não Statement's simples vc irá popular o ArrayList, entaum por que gastar duas vezes não é mesmo !!

Claudio Gualberto.
Mikhas
Virtual Machine Man
[Avatar]

Membro desde: 17/06/2008 11:10:50
Mensagens: 677
Localização: São Paulo
Offline

Bem... eu tenho um caso onde recupero o resultado de uma stored procedure e gero um CSV.

Na primeita linha do meu CSV, eu preciso colocar o tamanho do arquivo, quantos registros a SP me retornou.

Não seria um problema jogar tudo em uma lista e depois pegar o tamanho da lista... o problema é que a SP me retorna cerca de 60000 linhas!!! e para optimizar a performance, escrevo o CSV direto com o resultado da stored procedure devidamente formatada.

Refractor 1.6 - Easy reflection framework
Agora muito mais rapido!
Raze - The fastest CSS selector engine




[Email] [MSN]
hugoschm
Smalltalk

Membro desde: 22/05/2012 18:16:22
Mensagens: 1
Offline

Para a posteridade: creio que a forma certa de resolver isto seria contar o número de resultados no banco de dados (com os devidos indexes para tabelas grandes).
Por exemplo, no Postgresql você faria:

SELECT COUNT(*) as rowCount FROM users WHERE age > 21;
 
Índice dos Fóruns » Java Básico
Ir para:   
Powered by JForum 2.1.8 © JForum Team