Tin*_*iny 5 oracle pagination hibernate oracle10g top-n
在MySql中,使用LIMIT类似下面的子句可以使用单个SQL语句轻松实现分页的概念.
SELECT country_id, country_name
FROM country c
ORDER BY country_id DESC
LIMIT 4, 5;
Run Code Online (Sandbox Code Playgroud)
它将从SQL查询检索的结果集中检索从开头5到的行10.
在Oracle中,使用带有子查询的行号可以实现同样的目的,使得任务有点繁琐,如下所示.
SELECT country_id, country_name
FROM
(SELECT rownum as row_num, country_id, country_name
FROM
(SELECT country_id, country_name
FROM country
ORDER BY country_id desc)
WHERE rownum <= 10
)
WHERE row_num >=5;
Run Code Online (Sandbox Code Playgroud)
在Oracle 10g(或更高版本中,我不确定更高版本),这可以做得有些简单,例如,
SELECT country_id, country_name
FROM (SELECT country_id, country_name, row_number() over (order by country_id desc) rank
FROM country)
WHERE rank BETWEEN 6 AND 10;
Run Code Online (Sandbox Code Playgroud)
关于像Web应用程序这样的应用程序,需要分页的概念几乎无处不在,并且每次执行(select)查询时编写这样的SQL语句有时是一项繁琐的工作.
假设我有一个使用Java的Web应用程序.如果我使用Hibernate框架,那么有一种直接的方法可以使用Hibernate支持的一些方法,比如
List<Country>countryList=session.createQuery("from Country order by countryId desc")
.setFirstResult(4).setMaxResults(5).list();
Run Code Online (Sandbox Code Playgroud)
但是当我只使用与Oracle的JDBC连接时,
String connectionURL = "jdbc:oracle:thin:@localhost:1521:xe";
Connection connection = null;
Statement statement = null;
ResultSet rs = null;
Class.forName("oracle.jdbc.OracleDriver").newInstance();
connection = DriverManager.getConnection(connectionURL, "root", "root");
statement = connection.createStatement();
rs = statement.executeQuery("SELECT * from country");
Run Code Online (Sandbox Code Playgroud)
在这种情况下我的问题是,是否有一种使用此代码检索指定行范围的精确方法?就像在前面的情况下,使用方法类似setFirstResult()与setMaxResults()?或实现此目的的唯一方法是使用指定的子查询.
| 归档时间: |
|
| 查看次数: |
2300 次 |
| 最近记录: |