total de registros de uma recordset  XML
Índice dos Fóruns » Java Básico
Autor Mensagem
proteus_adi
JavaGuru
[Avatar]

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.
[Email] [MSN]
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.



[WWW]
keller
GUJ Master
[Avatar]

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
[WWW] [MSN]
kuchma
Moderador
[Avatar]

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.
[WWW] [ICQ]
proteus_adi
JavaGuru
[Avatar]

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.
[Email] [MSN]
aborges
GUJ Ranger
[Avatar]

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
[Email] [WWW]
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

aborges
GUJ Ranger
[Avatar]

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
[Email] [WWW]
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!
smota
Moderador
[Avatar]

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"
keller
GUJ Master
[Avatar]

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
[WWW] [MSN]
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
[Email]
aborges
GUJ Ranger
[Avatar]

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
[Email] [WWW]
proteus_adi
JavaGuru
[Avatar]

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.
[Email] [MSN]
kuchma
Moderador
[Avatar]

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.
[WWW] [ICQ]
 
Índice dos Fóruns » Java Básico
Ir para:   
Powered by JForum 2.1.8 © JForum Team