Postgresql - Quantidade total de registros em uma consulta paginada

11 respostas
B

Olá a todos!

Estou utilizando paginação no postgresql (limit, offset)…
Tem alguma forma de obter o total de registros na mesma execução?
OBS: O total que refiro seria o total de registros que a select traria, caso fossem retirados (limit e offset).

Tentei localizar alguma propriedade do Statement ou ResultSet, mas, sem sucesso…

[]s

11 Respostas

Hebert_Coelho

Que eu saiba, não.

Apenas com um count mesmo.

paulo1911

O size da lita de retorno ajudaria?
fallow

Hebert_Coelho

paulo1911:
O size da lita de retorno ajudaria?
fallow
Mas se a consulta é paginada, a lista não teria o mesmo numero de itens que a paginação?

paulo1911

depende.
Isso ocorre muito na ultima página de registros por exemplo:
eu tenho 100 registros na base
meu pageSize é de 30

sendo assim eu tenho 3 páginas de 30 e uma de 10 registros certo?

Eu posso ter um pageSize de 100 mas se no intervalo eu tiver somente 10 registros nessa pagina o size dessa paginação será o tamanho 10.

fica a dica

Hebert_Coelho

paulo1911:
depende.
Isso ocorre muito na ultima página de registros por exemplo:
eu tenho 100 registros na base
meu pageSize é de 30

sendo assim eu tenho 3 páginas de 30 e uma de 10 registros certo?

Eu posso ter um pageSize de 100 mas se no intervalo eu tiver somente 10 registros nessa pagina o size dessa paginação será o tamanho 10.

fica a dica

-_-’’ isso aí é matemática que funciona apenas para a ultima página, ou seja, apenas por isso nem precisava abrir o post.
Se for isso que ele queria… na boa, não respondo mais nada hoje. MAuhaha

A

Tente o código abaixo:

count(*) over() total
paulo1911

Pois é, acredito que seja isso que ele precisa.
Paginação não tem segredo.
abç

Hebert_Coelho

paulo1911:
Pois é, acredito que seja isso que ele precisa.
Paginação não tem segredo.
abç
Mas se for na primeira página, como faria do modo como você falou?

paulo1911

Veja:

public List<UserBean> findAllPaginado(Integer page, Integer pageSize) {
		Criteria criteria = createCriteria();
		criteria.addOrder(Order.asc("name"));
		criteria.setFirstResult((page - 1) * pageSize);
		criteria.setMaxResults(pageSize);
                List<UserBean> toReturn = (List<UserBean>) criteria.list();
                
               toReturn.size();// Aqui eu sei quantos registro vieram na página, simples assim! 

		return toReturn;

	}

Isso também vale para ResultSet, HQL e NativeQuery…
fica a dica

Hebert_Coelho

paulo1911:
Veja:

public List<UserBean> findAllPaginado(Integer page, Integer pageSize) {
		Criteria criteria = createCriteria();
		criteria.addOrder(Order.asc("name"));
		criteria.setFirstResult((page - 1) * pageSize);
		criteria.setMaxResults(pageSize);
                List<UserBean> toReturn = (List<UserBean>) criteria.list();
                
               toReturn.size();// Aqui eu sei quantos registro vieram na página, simples assim! 

		return toReturn;

	}

Isso também vale para ResultSet, HQL e NativeQuery…
fica a dica

Então eu entendi errado. Achei que ele queria o total encontrado na tabela. ^^

A

Acho que você entendeu certo.
Do post original:

Foi para isso que eu respondi.

Criado 8 de novembro de 2012
Ultima resposta 9 de nov. de 2012
Respostas 11
Participantes 4