S� evitem fazer count(*) e sim count(1), pois o asterisco vai fazer o banco armazenar o conte�do de todas as colunas durante a execu��o do count.
 
Em linhas gerais, a dica � a seguinte:
1. Se a qtd. de registros a ser retornada � pequena - entre 100 e 500, por exemplo - melhor trazer logo tudo, economizando uma consulta ao banco para fazer o count. N�o esque�a de configurar o m�todo setFetchSize() do Statement/PreparedStatement para um tamanho razo�vel - algo entre 10 e 50 - mas isso depende tamb�m do tipo de processamento a ser feito com os registros.
 
2. Caso a qtd. seja muito grande, vale mais apena fazer um count(*) no banco.
 
 
[]s
 
Maiko

Marcelo Ivan Martin <[EMAIL PROTECTED]> wrote:
Ja passei por esse problema, a maneira para lidar com a situa��o foi a
seguinte:

considere o m�todo conta() e o lista(), ambos chamam o select(...) por�m
passando o tipo.
dependendo do tipo passado o metodo select(...) pega as colunas corretamente
pelo colunasConsulta(tipo);

� "mais r�pido" fazer um select count(*) do que carregar todo o conteudo no
recordset antes.

...
public String colunasConsulta(byte tipoConsulta){
String strSQL = "";

if (tipoConsulta == SELECT_LISTA){
if (bColunasSelect) {
strSQL = strColunasSelect;
} else {
strSQL = strSQL + "cntb_Diario.cod_Livro, " ;
strSQL = strSQL + "cntb_Diario.seq_Exercicio, " ;
...
}
} else {
strSQL = strSQL + "COUNT(*) numReg " ;
}

...
public void lista() throws Exception{
select(SELECT_LISTA);
}
...

public long conta() throws Exception{
select(SELECT_CONTA);
if (rs.next()){
return rs.getLong(1);
} else {
return 0;
}
}
...

private void select(byte tipo) throws Exception{
...
String strSQL = "SELECT ";
strSQL = strSQL + colunasConsulta(tipo);
if (gJoin.compareTo("")==0){
strSQL = strSQL + " FROM cntb_Diario \n" ;
strSQL = strSQL + " LEFT JOIN cntb_Exercicio
seq_Exercicio_cntb_Exercicio \n" ;
strSQL = strSQL + " ON cntb_Diario.seq_Exercicio =
seq_Exercicio_cntb_Exercicio.seq_Exercicio \n" ;
} else {
strSQL = strSQL + gJoin;
} if (strWhere.compareTo("")!=0){
strSQL = strSQL + " WHERE " + strWhere;
}
if (bFiltraGroupBy){
strSQL = strSQL + " GROUP BY " + strGroupBy;
}
if (bFiltraOrderBy && tipo == SELECT_LISTA){
if (strOrderBy.compareTo("")!=0){
strSQL = strSQL + " ORDER BY " + strOrderBy;
}
} else {
strSQL = strSQL + " ORDER BY 1";
}

Espero ter ajudado...

___________________
Marcelo Ivan Martin
(55) 51 - 9841 5289
Martin Cons. e Des. Ltda

----- Original Message -----
From: "Pedro Burglin" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Wednesday, July 02, 2003 5:45 PM
Subject: Re: [enterprise-list] Quantidade de Registros num RecordSet


> Esse metodo nao retorna o numero de linhas de um ResultSet, mas sim o
> numero maximo de linhas que este PODERA ter. Se o numero de linhas passar,
> estas serao desprezadas.
>
> de acordo com a documentacao:
> "Retrieves the maximum number of rows that a ResultSet object produced by
> this Statement object can contain. If this limit is exceeded, the excess
> rows are silently dropped."
>
> e a documentacao do setMaxRows:
> "Sets the limit for the maximum number of rows that any ResultSet object
can
> contain to the given number. If the limit is exceeded, the excess rows are
> silently dropped."
>
>
> ----- Original Message -----
> From: "naipassac" <[EMAIL PROTECTED]>
> To: <[EMAIL PROTECTED]>
> Sent: Wednesday, July 02, 2003 8:26 AM
> Subject: Re: [enterprise-list] Quantidade de Registros num RecordSet
>
>
> > Fernando,
> >
> > Na vers�o 1.4 do J2SE na package java.sql, na interface
> > Statement, tem um m�todo chamado getMaxRows(), que retorna o
> > n�mero de linhas de um ResultSet.
> >
> > Espero q tenha ajudado.
> >
> > Rodrigo Cassapian
> >
> > > Humm... esta pergunta j� apareceu na lista. D� uma procurada
> > no hist�rico.
> > > Acho que n�o tem um jeito legal, n�o.
> > >
> > > ----- Original Message -----
> > > From: "JOSE FERNANDO ALVES PEREIRA" <[EMAIL PROTECTED]
> > com>
> > > To: <[EMAIL PROTECTED]>
> > > Sent: Tuesday, July 01, 2003 2:22 PM
> > > Subject: [enterprise-
> > list] Quantidade de Registros num RecordSet
> > >
> > >
> > > > E ai pessoal,
> > > >
> > > > Alguem sabe alguma forma de retorna a quantidade de regist
> > ros retornados
> > > por
> > > > um recordSet?
> > > >
> > > > Existe algo assim: recordSet.Count()?
> > > >
> > > > Valeu....
> > > >
> > > > Fernando.
> > > >
> > > > __________________________________________________________
> > _______
> > > > MSN Hotmail, o maior webmail do Brasil. http://www.hotmai
> > l.com
> > > >
> > > >
> > > > ----------------------------------------------------------
> > -----------
> > > > Para cancelar a subscri��o, envie mensagem para:
> > > [EMAIL PROTECTED]
> > > > Para comandos adicionais, envie mensagem para:
> > > [EMAIL PROTECTED]
> > > >
> > > >
> > >
> > >
> > >
> > > ------------------------------------------------------------
> > ---------
> > > Para cancelar a subscri��o, envie mensagem para: enterprise-
> > [EMAIL PROTECTED]
> > > Para comandos adicionais, envie mensagem para: enterprise-
> > [EMAIL PROTECTED]
> > >
> > >
> >
> >
> > ---
> > UOL, o melhor da Internet
> > http://www.uol.com.br/
> >
> >
> > ---------------------------------------------------------------------
> > Para cancelar a subscri��o, envie mensagem para:
> [EMAIL PROTECTED]
> > Para comandos adicionais, envie mensagem para:
> [EMAIL PROTECTED]
> >
>
>
> ---------------------------------------------------------------------
> Para cancelar a subscri��o, envie mensagem para:
[EMAIL PROTECTED]
> Para comandos adicionais, envie mensagem para:
[EMAIL PROTECTED]
>
>


---------------------------------------------------------------------
Para cancelar a subscri��o, envie mensagem para: [EMAIL PROTECTED]
Para comandos adicionais, envie mensagem para: [EMAIL PROTECTED]



Yahoo! Mail
Mais espa�o, mais seguran�a e gratuito: caixa postal de 6MB, antiv�rus, prote��o contra spam.

Responder a