Oracle和分页
发布时间:2020-12-12 16:24:24 所属栏目:百科 来源:网络整理
导读:在 MySql中,使用LIMIT子句可以使用单个SQL语句轻松实现分页的概念,如下所示. SELECT country_id,country_name FROM country c ORDER BY country_id DESC LIMIT 4,5; 它将检索SQL查询检索的结果集中从5到10开始的行. 在Oracle中,使用带有子查询的行号可以实现
在
MySql中,使用LIMIT子句可以使用单个SQL语句轻松实现分页的概念,如下所示.
SELECT country_id,country_name FROM country c ORDER BY country_id DESC LIMIT 4,5; 它将检索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; 在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; 关于像Web应用程序这样的应用程序,需要分页的概念几乎无处不在,并且每次执行(select)查询时编写这样的SQL语句有时是一项繁琐的工作. 假设我有一个使用Java的Web应用程序.如果我使用Hibernate框架,那么有一种直接的方法可以使用Hibernate支持的一些方法,比如 List<Country>countryList=session.createQuery("from Country order by countryId desc") .setFirstResult(4).setMaxResults(5).list(); 但是当我只使用与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"); 在这种情况下我的问题是,是否有一种使用此代码检索指定行范围的精确方法?就像前面的情况一样,使用类似setFirstResult()和setMaxResults()的方法?或实现此目的的唯一方法是使用指定的子查询. 因为’不’也是一个答案:不幸的是,您将不得不使用子查询方法.我个人会使用排名第二的人(第二个). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |