Ну, вам придется делить на ноль, что вы не можете сделать, поэтому я думаю, что большинство языков будет иметь какое-то значение NaN.
Ссылки:
Вы можете использовать Query.setMaxResults (int results) и Query.setFirstResult (int offset).
Редактирование тоже: нет способа узнать, сколько результатов вы получите. Итак, сначала вы должны запросить "select count (*) ...". Немного некрасиво, ИМХО.
Вы должны выполнить отдельный запрос, чтобы получить максимальные результаты ... и в случае, когда между моментом A первого раза клиент выдает запрос на подкачку до момента B, когда выдается другой запрос , если добавляются новые записи или некоторые записи теперь соответствуют критериям, вам нужно снова запросить максимальное значение, чтобы отразить его. Я обычно делаю это в HQL, как это
Integer count = (Integer) session.createQuery("select count(*) from ....").uniqueResult();
для запросов Criteria
. Я обычно помещаю свои данные в DTO, как это
ScrollableResults scrollable = criteria.scroll(ScrollMode.SCROLL_INSENSITIVE);
if(scrollable.last()){//returns true if there is a resultset
genericDTO.setTotalCount(scrollable.getRowNumber() + 1);
criteria.setFirstResult(command.getStart())
.setMaxResults(command.getLimit());
genericDTO.setLineItems(Collections.unmodifiableList(criteria.list()));
}
scrollable.close();
return genericDTO;
вы могли выполнить два запроса - запрос типа count (*), который должен быть дешевым, если вы не объединяете слишком много таблиц вместе, и второй запрос с установленными ограничениями. Тогда вы знаете, сколько элементов существует, но берете только те, которые просматриваются.
Я лично считаю, что вам следует обрабатывать подкачку страниц во внешнем интерфейсе. Я знаю, что это не так эффективно, но, по крайней мере, это было бы менее подвержено ошибкам.
Если бы вы использовали счетчик (*), что произойдет, если записи будут удалены из таблицы между запросами определенной страницы? Так многое может пойти не так.