[Java代码] JDBC分页工具类

  1. package com.iflytek.page;
  2. http://www.kmnk01.com/hxpfk/2015/myzj_1125/107.html
  3. /**
  4. * 分页工具类
  5. *
  6. * @author xudongwang 2012-1-19
  7. *
    http://www.kmnk01.com/hxpfk/2015/myzj_1125/108.html
  8. * Email:xdwangiflytek@gmail.com
  9. */
    http://www.kmnk01.com/hxpfk/2015/myzj_1125/109.html
  10. public class Page {
  11. http://www.kmnk01.com/hxpfk/2015/myzj_1125/110.html
  12. /**
  13. * 总记录数
  14. */
  15. private int totalRow;
    http://www.kmnk01.com/hxpfk/2015/myzj_1125/111.html
  16. /**
  17. * 每页记录数
  18. */
    http://www.kmnk01.com/hxpfk/2015/zlff_1125/112.html
  19. private int pageSize = 10;
  20. /**
  21. * 当前页码
  22. */
  23. private int currentCount;
    http://www.kmnk01.com/hxpfk/2015/zlff_1125/113.html
  24. /**
  25. * 总页数
  26. */
  27. private int total;
  28. http://www.kmnk01.com/hxpfk/2015/zlff_1125/114.html
  29. /**
  30. * 起始记录下标
  31. */
  32. private int beginIndex;
  33. http://www.kmnk01.com/hxpfk/2015/zlff_1125/115.html
  34. /**
  35. * 截止记录下标
  36. */
  37. private int endIndex;
  38. /**
    http://www.kmnk01.com/hxpfk/2015/zlff_1125/115.html
  39. * 构造方法,使用总记录数,当前页码
  40. *
    http://www.kmnk01.com/hxpfk/2015/zlff_1125/117.html
  41. * @param totalRow
  42. * 总记录数
  43. * @param currentCount
    http://www.kmnk01.com/hxpfk/2015/zlff_1125/117.html
  44. * 当前页面,从1开始
  45. */
  46. public Page(int totalRow, int currentCount) {
    http://www.kmnk01.com/hxpfk/2015/yydt_1125/119.html
  47. this.totalRow = totalRow;
  48. this.currentCount = currentCount;
  49. calculate();
    http://www.kmnk01.com/hxpfk/2015/yydt_1125/120.html
  50. }
  51. /**
    http://www.kmnk01.com/hxpfk/2015/yydt_1125/121.html
  52. * 构造方法 ,利用总记录数,当前页面
  53. *
  54. * @param totalRow
    http://www.kmnk01.com/hxpfk/2015/mtbd_1125/122.html
  55. * 总记录数
  56. * @param currentCount
    http://www.kmnk01.com/hxpfk/2015/mtbd_1125/123.html
  57. * 当前页面
  58. * @param pageSize
  59. * 默认10条
  60. */
  61. public Page(int totalRow, int currentCount, int pageSize) {
  62. this.totalRow = totalRow;
  63. this.currentCount = currentCount;
  64. this.pageSize = pageSize;
    http://www.kmnk01.com/hxpfk/2015/xjsb_1125/124.html
  65. calculate();
  66. }
  67. private void calculate() {
  68. total = totalRow / pageSize + ((totalRow % pageSize) > 0 ? 1 : 0);
  69. if (currentCount > total) {
  70. currentCount = total;
  71. } else if (currentCount < 1) {
  72. currentCount = 1;
    http://www.kmnk01.com/hxpfk/2015/xjsb_1125/125.html
  73. }
  74. beginIndex = (currentCount - 1) * pageSize;
  75. endIndex = beginIndex + pageSize;
  76. if (endIndex > totalRow) {
  77. endIndex = totalRow;
  78. }
  79. }
  80. public int getTotalRow() {
  81. return totalRow;
    http://www.kmnk01.com/hxpfk/2015/xjsb_1125/126.html
  82. }
  83. public int getPageSize() {
  84. return pageSize;
  85. }
  86. public int getCurrentCount() {
  87. return currentCount;
  88. }
  89. public int getTotal() {
  90. return total;
  91. }
  92. public int getBeginIndex() {
  93. return beginIndex;
  94. }
  95. public int getEndIndex() {
  96. return endIndex;
  97. }
  98. }
复制代码

继续

在后台获取前台传进来的页码 //从页面取得页码

  1. int currentPage = 1;
  2. try {
  3. currentPage = Integer.parseInt(request.getParameter("currentPage"));
  4. } catch (Exception ex) {}
  5. //取得总记录数,创建Page对象
  6. int totalRow = studentDao.getAllStudents();//通过select count 取得总记录数
  7. Page page = new Page(totalRow, currentPage);
  8. studentDao.list(page);
复制代码
数据访问层, StduentDao.java
  1. public List<Stduent> getStudentsByPage(Page page) {
  2. List<Stduent> students = new ArrayList<Stduent>();
  3. try {
  4. String sql = "SELECT id,name,email FROM tbl_stduent";
  5. Connection conn = null;
  6. try {
  7. conn = DbUtil.getConnection();
  8. Statement statement = conn.createStatement();
  9. statement.setMaxRows(page.getEndIndex());//关键代码,设置最大记录数为当前页记录的截止下标
  10. ResultSet resultSet = statement.executeQuery(sql);
  11. if (page.getBeginIndex() > 0) {
  12. resultSet.absolute(page.getBeginIndex());//关键代码,直接移动游标为当前页起始记录处
  13. }
  14. while (resultSet.next()) {
  15. Stduent student = new Student();
  16. ……
  17. students.add(student);
  18. }
  19. resultSet.close();
  20. statement.close();
  21. } finally {
  22. if (conn != null) {
  23. conn.close();
  24. }
  25. }
  26. } catch (SQLException e) {
  27. e.printStackTrace();
  28. }
  29. return students;
  30. }
复制代码
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Oracle中实现分页查询需要用到ROWNUM,而查询总记录数需要用到COUNT函数。我们可以使用以下工具类来实现Oracle的分页查询和总记录数查询: ```java public class OraclePageHelper { /** * 获取分页SQL * * @param sql 原始SQL * @param pageNo 当前页码 * @param pageSize 每页显示数量 * @return 分页SQL */ public static String getPageSql(String sql, int pageNo, int pageSize) { int startRow = (pageNo - 1) * pageSize + 1; int endRow = startRow + pageSize - 1; StringBuilder pageSql = new StringBuilder(); pageSql.append("SELECT * FROM (SELECT A.*, ROWNUM RN FROM ("); pageSql.append(sql); pageSql.append(") A WHERE ROWNUM <= "); pageSql.append(endRow); pageSql.append(") WHERE RN >= "); pageSql.append(startRow); return pageSql.toString(); } /** * 获取总记录数SQL * * @param sql 原始SQL * @return 总记录数SQL */ public static String getCountSql(String sql) { StringBuilder countSql = new StringBuilder(); countSql.append("SELECT COUNT(*) FROM ("); countSql.append(sql); countSql.append(")"); return countSql.toString(); } } ``` 使用该工具类,我们可以很方便地实现Oracle的分页查询和总记录数查询。例如: ```java // 原始SQL String sql = "SELECT * FROM user"; // 查询第1页,每页显示10条记录 int pageNo = 1; int pageSize = 10; // 获取分页SQL String pageSql = OraclePageHelper.getPageSql(sql, pageNo, pageSize); // 获取总记录数SQL String countSql = OraclePageHelper.getCountSql(sql); // 查询总记录数 long total = jdbcTemplate.queryForObject(countSql, Long.class); // 查询数据页 List<User> userList = jdbcTemplate.query(pageSql, new BeanPropertyRowMapper<>(User.class)); ``` 其中,jdbcTemplate是Spring框架提供的JDBC操作模板,我们可以使用它来执行SQL语句。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值