| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/11/2004 13:56:28
|
proteus_adi
JavaGuru
![[Avatar]](/images/avatar/13d7dc096493e1f77fb4ccf3eaf79df1.jpg)
Membro desde: 24/11/2004 10:05:10
Mensagens: 237
Localização: Belo Horizonte -
Offline
|
Statement stmt = conn.createStatement();
ResultSet rset = stmt.executeQuery("select nome from algo_tst");
// Print the name out
String s_rcount;
s_rcount = ?;// numero de registros retornados
como é?
|
"Remember Yesterday and think about tomorrow... but you have to live today"
Existe vitória e existe derrota.
O segundo lugar é o primeiro dos que perderam. |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/11/2004 14:28:05
|
thingol
Moderador
Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline
|
Normalmente você percorre o recordset para contar quantos registros, ou então usa uma query como "SELECT COUNT(*)".
Problemas do SELECT COUNT(*):
- Alguns bancos (como o SQL Server) processam SELECT COUNT(*) muito devagar.
- Se você tem algo como:
SELECT COUNT (*) WHERE cond
alocar um array contendo os N registros necessários
SELECT ____ WHERE cond
você (a menos que use uma transação) pode ter um caso em que entre o SELECT COUNT(*) e o SELECT____ para recuperar os dados aconteça de a contagem ser alterada no pequeno espaço de tempo da alocação do array, obtendo menos ou mais linhas que o esperado.
Percorrer o recordset e contar quantos registros é melhor, basta usar um ArrayList em vez de um array para guardar os registros que foram lidos.
|
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/11/2004 14:38:52
|
keller
GUJ Master
![[Avatar]](/images/avatar/f410588e48dc83f2822a880a68f78923.jpg)
Membro desde: 12/11/2003 16:24:00
Mensagens: 1817
Localização: Auckland - NZ
Offline
|
uma solução ruim mas funcional...
percorre o resultset contando o numero de registro
e depois lhe tras para o 1o
valeu ? t+
|
Guilherme I. Keller (Gui)
Diploma in Web Development and Desktop Publishing
SCJA | SCJP | SCWCD | SCBCD | CSM
"Test it, before it test you."
http://flickr.com/guikeller |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/11/2004 14:51:52
|
kuchma
Moderador
![[Avatar]](/images/avatar/85422afb467e9456013a2a51d4dff702.jpg)
Membro desde: 17/01/2003 19:36:16
Mensagens: 1231
Localização: Curitiba - PR
Offline
|
thingol wrote:- Alguns bancos (como o SQL Server) processam SELECT COUNT(*) muito devagar.
Diz a lenda que:
SELECT COUNT(coluna_indexada) eh mais rapido do que SELECT COUNT(*).
SELECT COUNT(1) eh melhor do que a opcao anterior.
Alguem sabe se isso procede?
Marcio Kuchma
|
E tu, Belém-Efrata, pequena demais para figurar como grupo de milhares de Judá, de ti me sairá o que há de reinar em Israel, e cujas origens são desde os tempos antigos, desde os dias da eternidade. Mq 5:2, Miquéias, 750 AC aprox. |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/11/2004 15:55:02
|
proteus_adi
JavaGuru
![[Avatar]](/images/avatar/13d7dc096493e1f77fb4ccf3eaf79df1.jpg)
Membro desde: 24/11/2004 10:05:10
Mensagens: 237
Localização: Belo Horizonte -
Offline
|
int s_rcount;
rset.last();
s_rcount = rset.getRow();
rset.first();
isso ai num funciona naum???
|
"Remember Yesterday and think about tomorrow... but you have to live today"
Existe vitória e existe derrota.
O segundo lugar é o primeiro dos que perderam. |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/11/2004 16:19:54
|
aborges
GUJ Ranger
![[Avatar]](/images/avatar/c896d785411ce08cdd4ea.jpg)
Membro desde: 08/10/2003 11:44:19
Mensagens: 818
Localização: Caçapava - SP
Offline
|
Nao gosto muito da ideia de utilizar o "last()" e depois o "first()", pq vc tem que abrir um resultset que suporte FORWARD E BACKWARD, o que nao eh tao bom pra performace qt os TYPE_FORWARD_ONLY....
Prefiro fazer um count dos registros no select !
|
Linux é que nem sexo, quem não conheçe diz que dói
Alexandre Borges |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/11/2004 16:22:21
|
ZehOliveira
GUJ Ranger
Membro desde: 12/12/2003 22:13:49
Mensagens: 964
Localização: Maceio-AL
Offline
|
Se você tem um resultset muito pesado, não é uma boa alternativa iterá-lo todo, fazendo um contador, pra saber a quantidade de registros. Isso pode afetar muito o desempenho do seu sistema. Não sei se há muita diferença entre pecorrer o resultset todo e usar o método last().
Mas, por outro lado, nem sempre é possível criar uma nova consulta, do tipo "select count(*)...", só pra saber a quantidade de registros.
Recomendo você fazer um teste antes, testando as alternativas. A que apresentar um menor custo pro sistema, você usa.
This message was edited 1 time. Last update was at 29/11/2004 16:22:59
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/11/2004 16:30:31
|
aborges
GUJ Ranger
![[Avatar]](/images/avatar/c896d785411ce08cdd4ea.jpg)
Membro desde: 08/10/2003 11:44:19
Mensagens: 818
Localização: Caçapava - SP
Offline
|
Perfeito!
Com dizem por aih... "Cada caso é um caso...."
|
Linux é que nem sexo, quem não conheçe diz que dói
Alexandre Borges |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/11/2004 16:49:23
|
Lupino
Entusiasta Java
Membro desde: 28/10/2003 13:26:27
Mensagens: 24
Offline
|
Vc pode usar o metodo getFetchSize() para retornar o tamanho do resultset.
Isso so funciona se o driver que vc esta usando tiver esse metodo implementado. Nada como exerimentar!
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/11/2004 17:12:13
|
smota
Moderador
![[Avatar]](/images/avatar/ca9c267dad0305d1a6308d2a0cf1c39c.jpg)
Membro desde: 21/02/2003 16:19:19
Mensagens: 1647
Offline
|
Lupino wrote:Vc pode usar o metodo getFetchSize() para retornar o tamanho do resultset.
Nonon ... o fetchsize só diz quantos registros o recordset traz do banco a cada requisição ... nao tem necessariamente a ver com a quantidade de registros do result.
|
"Perfection is reached not when there's nothing more to add but when there's no more to take out" |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/11/2004 22:57:58
|
keller
GUJ Master
![[Avatar]](/images/avatar/f410588e48dc83f2822a880a68f78923.jpg)
Membro desde: 12/11/2003 16:24:00
Mensagens: 1817
Localização: Auckland - NZ
Offline
|
só ressaltando é uma solução ruim mas funcional a que eu passei..
valeu ? t+ ai..
|
Guilherme I. Keller (Gui)
Diploma in Web Development and Desktop Publishing
SCJA | SCJP | SCWCD | SCBCD | CSM
"Test it, before it test you."
http://flickr.com/guikeller |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/11/2004 01:34:10
|
Shneider
Debugger
Membro desde: 17/08/2003 09:58:57
Mensagens: 72
Offline
|
Em sistemas que eu preciso saber quantos registros tenho em cada tabela, eu costumo criar outra tabela com tais dados. Eh uma dor de cabeca pro desenvolvedor pq eh mais inserts e deletes no codigo, mas a longo prazo traz menos dor de cabeca e eu acho a gambiarra mais bonita de todas hehehe.
|
[ ]'s |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/11/2004 09:54:50
|
aborges
GUJ Ranger
![[Avatar]](/images/avatar/c896d785411ce08cdd4ea.jpg)
Membro desde: 08/10/2003 11:44:19
Mensagens: 818
Localização: Caçapava - SP
Offline
|
Eh
Digamos q vc tenha uma tabela de 10 Milhoes de registros e quer selecionar 1 Milhao.... Vc seleciona os dados desta, deleta os da tabela temporaria, insere seus 1 Milha de registros lah e conta qts tem??
Alem disso, como vc garante concorrencia? Tipo, 2 carinhas rodando o programa ao mesmo tempo? Vc criou uma chave na "tabela temporaria" pra fazer saber de qual processo sao aqueles dados....
Nao entendi muito bem a solucao nao ....
|
Linux é que nem sexo, quem não conheçe diz que dói
Alexandre Borges |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/11/2004 09:55:07
|
proteus_adi
JavaGuru
![[Avatar]](/images/avatar/13d7dc096493e1f77fb4ccf3eaf79df1.jpg)
Membro desde: 24/11/2004 10:05:10
Mensagens: 237
Localização: Belo Horizonte -
Offline
|
puxa vida!
que polêmica!!!
em questão à minha sujestão e a sujestão do alce ai...
eu acho que deve dar quase no mesmo.. pois o programa deve colocar todos os dados em buffer...
a sujestão e técnica do kra que cria tabelas parece boas,
assim esta tabela pode ainda ser usado pra gerar sequencies, deixando toda regra , inclusive a de geração de sequencies no programa...[embora não seja tão válido assim pra relacionamentos]
quando eu tenho uma tabela de fatos e uma de detalhes, isso não funciona....
receio que eu tenha que buffetizar todos os dados da tabela só pra saber quandos registros tem....
----
eu tentei um tal de
getArray(1).getLength();
mas deu erro....
pode ser que esta seja uma boa solução...
alguem me ajuda a implementar essa lógica?!
ou se não for tão boa...
me avisem
|
"Remember Yesterday and think about tomorrow... but you have to live today"
Existe vitória e existe derrota.
O segundo lugar é o primeiro dos que perderam. |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/11/2004 11:34:20
|
kuchma
Moderador
![[Avatar]](/images/avatar/85422afb467e9456013a2a51d4dff702.jpg)
Membro desde: 17/01/2003 19:36:16
Mensagens: 1231
Localização: Curitiba - PR
Offline
|
proteus_adi wrote:pois o programa deve colocar todos os dados em buffer...
Pronto. Isso aqui resolve. Se voce tem que iterar pelo ResultSet para fazer alguma coisa com ele que NAO seja exibir diretamente (o que geralmente eh o mais "correto"), aproveite e va incrementando um contador. No final voce tem o buffer/lista/etc e o contador prontinhos para uso. Sem dor-de-cabeca.
IMHO, o recurso de verificar a quantidade de linhas no ResultSet sem ter que percorre-lo poderia ser obrigatorio na especificacao do JDBC. Nao parece ser tao dificil fazer o driver JDBC devolver essa informacao.
Marcio Kuchma
|
E tu, Belém-Efrata, pequena demais para figurar como grupo de milhares de Judá, de ti me sairá o que há de reinar em Israel, e cujas origens são desde os tempos antigos, desde os dias da eternidade. Mq 5:2, Miquéias, 750 AC aprox. |
|
|
 |
|
|