是否有一种可移植的方式来"选择第一个10*来自T"语义?

sta*_*ker 13 java sql spring jdbc

我想从数据库中读取10k记录块中的数据.

我在维基百科上发现了结果限制,很明显这不能用sql以便携方式完成.

另一种方法可能是JdbcTemplate,它提供了许多查询方法,但我怎么能确定已经读取了足够的行.通过RowMapper和ResultSetExtractor等回调,无法指出已经读取了足够的数据.

编辑:我正在寻找JdbcTemplate的解决方案这篇文章建议使用我忽略的setMaxRows.

Bal*_*usC 15

获取HibernateJPA.两者都熟悉各种数据库方言,并将透明地处理引擎盖下令人讨厌的数据库细节.

在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();
Run Code Online (Sandbox Code Playgroud)

在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();
Run Code Online (Sandbox Code Playgroud)


OMG*_*ies 5

SQL:2008中有一个ANSI标准语法:

SELECT t.* 
  FROM TABLE t
 FETCH FIRST 10 ROWS ONLY
Run Code Online (Sandbox Code Playgroud)

...但目前大多数数据库都不支持它.