java - 是否有一种可移植的方式来获得 "SELECT FIRST 10 * FROM T"语义?

标签 java sql spring jdbc

我想从数据库中读取 10k 条记录 block 中的数据。

我找到了 Result limits在 wikipedia 上,很明显这不能用 sql 以可移植的方式完成。

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

编辑:我正在寻找 JdbcTemplate 的解决方案 这个post建议使用 setMaxRows我忽略了。

最佳答案

捕获 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();

在 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();

关于java - 是否有一种可移植的方式来获得 "SELECT FIRST 10 * FROM T"语义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3400589/

相关文章:

java - 如何用数字更新 JLabels

java - 查找数组值的索引

java - 将年份字段的日期转换为两位数时出错

使用 CAST 或 CONVERT 时 SQL Server 错误 "Conversion failed"

sql - PostgreSQL 中的空 GROUP BY

java - 如何在控制台上显示日志消息?

java - 如何在ubuntu上运行java类?

mysql - 更新 Laravel 上的数据库值

java - 测试 web 层 Spring Boot

java - 你如何在 Spring MVC 中处理 Ajax 请求?