简体   繁体   English

如何仅使用jdbc和标准sql进行分页?

[英]How can I make pagination with only jdbc and standard sql?

I am starting a new project in java. 我正在用Java启动一个新项目。 I want to use only jdbc, no hibernate or jpa. 我只想使用jdbc,不能使用休眠或jpa。 My database is Microsoft SQL Server. 我的数据库是Microsoft SQL Server。 But it seems to be very complicated to do pagination with pure jdbc and sql. 但是用纯jdbc和sql进行分页似乎非常复杂。 There is built in support in hibernate/jpa for pagination. 在hibernate / jpa中内置了对分页的支持。 But I wanted go only with jdbc and standard sql. 但我只想使用jdbc和标准sql。 Searching over the internet I found various answers, all them try to solve the problem with modifying the original query. 通过互联网搜索,我找到了各种答案,所有这些答案都试图通过修改原始查询来解决问题。 I wanted to avoid adding anything in my original query just for pagination. 我想避免在我的原始查询中添加任何用于分页的内容。

My SQL Server version is "Microsoft SQL Server 2008" 我的SQL Server版本是“ Microsoft SQL Server 2008”

In SQL Server 2012 and above you can use OFFSET FETCH clause, but in SQL Server 2005 and above you can use ROW_NUMBER() function. 在SQL Server 2012及更高版本中,可以使用OFFSET FETCH子句,但在SQL Server 2005及更高版本中,可以使用ROW_NUMBER()函数。 Here you have an example: 这里有一个例子:

DECLARE @PageNumber int = 1;
DECLARE @PageSize int = 20;

WITH Q AS
(
    SELECT *, ROW_NUMBER() OVER (ORDER BY TheOrderColumn) AS record_number
    FROM YourOriginalQuery
)
SELECT *
FROM Q
WHERE 
    record_number > (@PageNumber - 1) * @PageSize
    AND record_number <= @PageNumber * @PageSize
ORDER BY record_number;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM