Я хочу считать данные в блоках, говорят что записи 10k от базы данных.
Я нашел пределы Результата на Википедию, и кажется очевидным, что это не может сделанный с sql портативным способом.
Другим подходом мог быть JdbcTemplate, который предлагает много методов для запросов, но как я мог решить, что достаточно строк было считано. Посредством обратных вызовов как RowMapper и ResultSetExtractor это не может быть обозначено, что достаточно данных было считано.
Править: Я искал решение для JdbcTemplate, Это сообщение предлагает использовать setMaxRows, который я пропустил.
Возьмите Hibernate или JPA . Оба знакомы с различными диалектами баз данных и будут прозрачно обрабатывать неприятные особенности БД.
В Hibernate вы можете разбивать на страницы, используя Criteria # setFirstResult ()
и Criteria # setMaxResults ()
. Например.
List users = session.createCriteria(User.class)
.addOrder(Order.asc("id"))
.setFirstResult(0) // Index of first row to be retrieved.
.setMaxResults(10) // Amount of rows to be retrieved.
.list();
В JPA вы можете сделать то же самое, используя Query # setFirstResult ()
и Query # setMaxResults ()
.
List users = em.createQuery("SELECT u FROM User u ORDER BY u.id");
.setFirstResult(0) // Index of first row to be retrieved.
.setMaxResults(10) // Amount of rows to be retrieved.
.getResultList();
Не существует переносимого способа сделать это на простом SQL, потому что разные механизмы SQL используют для этого разные синтаксисы.
Используйте уровень абстракции базы данных или DBAL.
Нет. Вот почему уровни абстракции базы данных, такие как Hibernate, содержат диалекты SQL , из которых вы выбираете тот, который будет использоваться с вашей базой данных.
Существует стандартный синтаксис ANSI из SQL: 2008 :
SELECT t.*
FROM TABLE t
FETCH FIRST 10 ROWS ONLY
... но в настоящее время он не поддерживается в большинстве баз данных.
Если вам нужен переносимый способ, вам нужно подняться на уровень абстракции, поскольку нет переносимого способа SQL (который в любом случае не реализуется в базах данных) - и использовать ORM-преобразователи, такие как, например, спящий режим.
Если вам действительно нужен необработанный JDBC, вам придется написать специальный SQL для каждой конкретной базы данных - что часто бывает в любом случае, поскольку написание 100% портативного SQL довольно сложно во всех, кроме тривиальных случаев.
Последнее средство - выполнить запрос без каких-либо ограничений и просто перебрать 10 первых результатов, которые вы получите, хотя это не задействует возможности базы данных и будет очень плохо, если ваш запрос приведет к many рядов.