虽然现在db层的框架很多,用起来也非常的方便,像分页这种非常常用的功能也基本上都有对应的接口可以直接使用。但是有时候数据源不在配置的范围的时候,就必须要使用到jdbc来执行sql,jdbc执行的是原生的sql,所以就没有什么分页接口可以调用了。这时候就要用到两个方法,一个是PreparedStatement的setMaxRows()方法,这个用来设置本次查询返回结果集数的最大数量,另一个是ResultSet的absolute()方法,这个用来设置结果集偏移的位置,当然还有一个ResultSet的relative()方法,这个方法和absolute()类似,只是一个是相对于整个结果集,一个是相对与当前位置。下面是实例:

  1. public ResultSet getPageByAbsolute(String sql,
  2. int pageNo,int pageSize) throws SQLException {
  3. PreparedStatement pre = getConn().prepareStatement(sql);
  4. pre.setMaxRows(pageNo*pageSize);
  5. ResultSet rs = pre.executeQuery();
  6. rs.absolute((pageNo - 1)*pageSize);
  7. return rs;
  8. }
 

ResultSet的游标会比结果集多两个,一个是最头,一个是最尾,所以在做偏移的时候要考虑到这两个游标,ResultSet的游标是从0开始的,比如现在要查询每页数量为20条的第2页的数据,那么就需要跳过前21个下标,从游标21开始才是第二页的数据,按照上面的方法只偏移了20,返回的rs的当前游标位置为20,所以在使用的时候需要再执行一下ResultSet的next()方法才是第二页的数据,考虑到一般在使用rs的时候都是while(rs.next()){。。。}这种方式,所以这样正好可以正确的获取到数据,relative()方法在这里体现不出它的功能特性,而且分页的话用absolute()方法就足够了,上面的方法把absolute换成relative也是一样的效果,因为一开始的当前位置就是0,跟absolute相对的位置是一样的。
在使用的时候要特别注意的是PreparedStatement 对象在创建的时候一定要加上ResultSet.TYPE_SCROLL_SENSITIVE和ResultSet.CONCUR_READ_ONLY这两个参数,如下:
PreparedStatement pre = conn.prepareStatement(sql,ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
不然的话会报java.sql.SQLException: 对只读结果集的无效操作的异常。

jdbc分页查询的更多相关文章

  1. JDBC分页查询及实现

    当数据过多时,一页之内是无法显示的,因此需要进行分页显示. (一)分页技术实现: 物理分页: - 在数据库执行查询时(实现分页查询),查询需要的数据--依赖数据库的SQL语句 - 在sql查询时,从数 ...

  2. jdbc之分页查询

    分页查询作为一项十分重要的数据库查询技术,在很多web项目中都会要用到,当然移动开发中也是会涉及的. 一.分页查询的sql语句: ps:为了方便阐述,下面统一使用student表作为查询的表:colN ...

  3. 分页查询信息(使用jdbc连接mysql数据库实现分页查询任务)

             分页查询信息       使用jdbc连接mysql数据库实现分页查询任务 通过mysql数据库提供的分页机制,实现商品信息的分页查询功能,将查询到的信息显示到jsp页面上. 本项目 ...

  4. JDBC在Java Web中的应用——分页查询

    分页查询 通过JDBC实现分页查询的方法有很多种,而且不同的数据库机制也提供了不同的分页方式,在这里介绍两种非常典型的分页方法. 通过ResultSet的光标实现分页 通过ResultSet的光标实现 ...

  5. JDBC使用游标实现分页查询的方法

    本文实例讲述了JDBC使用游标实现分页查询的方法.分享给大家供大家参考,具体如下: /** * 一次只从数据库中查询最大maxCount条记录 * @param sql 传入的sql语句 * @par ...

  6. JdbcTemplate+PageImpl实现多表分页查询

    一.基础实体 @MappedSuperclass public abstract class AbsIdEntity implements Serializable { private static ...

  7. MyBatis简单的增删改查以及简单的分页查询实现

    MyBatis简单的增删改查以及简单的分页查询实现 <? xml version="1.0" encoding="UTF-8"? > <!DO ...

  8. Java GUI+mysql+分页查询

    1.要求 : 创建一个学生信息管理数据库 2.实现分页查询 代码如下: a)学生实体类: /** * @author: Annie * @date:2016年6月23日 * @description: ...

  9. 基于Mysql数据库的SSM分页查询

    前言: Hello,本Y又来了,"分页"在我们使用软件的过程中是一个很常见的场景,比如博客园对于每个博主的博客都进行了分页展示.可以简单清晰的展示数据,防止一下子将过多的数据展现给 ...

随机推荐

  1. 关于 TCP 并发连接的几个思考题与试验

    http://blog.csdn.net/solstice/article/details/6579232

  2. 使用Java快速开发博客、官网等偏内容型网站-IDEA篇-MCMS

    分享快乐 由于官网提供的是eclipse的教学视频,清晰度感人,看得我就一个纳闷,反复的看,反复检查,就是不行,然后天真的寻觅帮助,反复查看文档依旧凉凉.最后放弃,转战idea.特此篇,希望能帮助到各 ...

  3. centos 命令行中 * 和 . 的区别

    錯誤    cp /home/test1/* /home/test2/ –a          用參數*將不可以複製linux中.開頭的隱藏文件 正確    cp /home/test1/. home ...

  4. C#如何把写好的类编译成dll文件

    1 新建一个类库项目   2 直接改写这个Class1.cs文件   3 记得要添加Windows.Forms引用   4 我直接把在别的项目中做好的cs文件搞到这里来,连文件名也改了(FilesDi ...

  5. react jsx 常见问题

    问题一: Expected to return a value in arrow function 解决方案: 修改后: // 使用 store return ( <div> <h1 ...

  6. 【block第四篇】实现

    -------------------------------------------欢迎查看block连载博客[专栏]--------------------------------------[b ...

  7. Android学习笔记-junit单元测试

    我们都知道测试对于程序员来说是必不可少的,所以,做Android程序,也要学会使用junit,这里比着java的junit测试,要稍微复杂一点,需要一些配置,下面饿哦就介绍一下怎样使用junit的测试 ...

  8. Delphi7目录结构

    Delphi7目录结构 打开Delphi的安装目录,如C:\Program Files\Borland\Delphi7,你将会看到目录下包含了一些文件和文件夹:Source:存放的是Delpi提供的所 ...

  9. robot framework运行测试 命令行启动

    ...\rf_test> pybot --test test_case test_suit.robot #运行一条用例 ...\rf_test> pybot test_suit.robot ...

  10. YTU 2543: 数字整除

    2543: 数字整除 时间限制: 1 Sec  内存限制: 128 MB 提交: 33  解决: 8 题目描述 定理:把一个至少两位的正整数的个位数字去掉,再从余下的数中减去个位数的5倍.当且仅当差是 ...