通过sql语句分页 如:SELECT * FROM users limit 3,2 从第4条记录开始后续显示两行,索引从0开始 (服务器机制)该方式的优缺点如下:
  优点:操作便捷(利用服务器内存),适合于大数据量操作,对底层数据库服务器起到保护作用。
  缺点:增加了和数据库交互的次数,访问速度较慢。

代码实现如下:

  1. 首先我们定义一个pageBean用来定义分页的相关信息。包括:pageSize每页显示的条目数,nowPage当前页码,rowCount总行数即总结果集,pageCount总页数,rowDate是list集合用来存放每页显示的结果集。

    Java代码  
    1. public class PageBean {
    2. // 成员变量
    3. private int pageSize = 0;// 页大小
    4. private int nowPage = 0;// 当前页面
    5. private int rowCount = 0;// 总行数
    6. private int pageCount = 0;// 页数
    7. private List<?> rowDate = null;
    8. // 成员函数
    9. public int getPageSize() {
    10. return pageSize;
    11. }
    12. public void setPageSize(int pageSize) {
    13. this.pageSize = pageSize;
    14. }
    15. public int getNowPage() {
    16. return nowPage;
    17. }
    18. public void setNowPage(int nowPage) {
    19. this.nowPage = nowPage;
    20. }
    21. public int getRowCount() {
    22. return rowCount;
    23. }
    24. public void setRowCount(int rowCount) {
    25. this.rowCount = rowCount;
    26. }
    27. public int getPageCount() {
    28. this.pageCount = rowCount % pageSize == 0 ? rowCount / pageSize
    29. : rowCount / pageSize + 1;
    30. return pageCount;
    31. }
    32. public List<?> getRowDate() {
    33. return rowDate;
    34. }
    35. public void setRowDate(List<?> rowDate) {
    36. this.rowDate = rowDate;
    37. }
    38. public PageBean(int pageSize, int nowPage, int rowCount, int pageCount,
    39. List<?> rowDate) {
    40. super();
    41. this.pageSize = pageSize;
    42. this.nowPage = nowPage;
    43. this.rowCount = rowCount;
    44. this.pageCount = pageCount;
    45. this.rowDate = rowDate;
    46. }
    47. public PageBean() {
    48. super();
    49. // TODO Auto-generated constructor stub
    50. }
    51. }
  2. 在对系统中的每个实体的DAO层实现分页。在该函数中需要pageSize ,nowPage两个参数;foodInfoCount())是用来获取总结果集的行数;该函数返回的是个pageBean对象。
    Java代码  
    1. public PageBean foodInfoByPage(int pageSize, int nowPage) {
    2. PageBean pb = new PageBean();
    3. pb.setPageSize(pageSize);
    4. pb.setNowPage(nowPage);
    5. pb.setRowCount(foodInfoCount());
    6. //step1:sql
    7. String sql ="select food_id,food_name,food_price,food_img,food_desc from tb_foodinfo limit "+(nowPage-1)*pageSize +", "+pageSize;//为什么不用?;?支持where
    8. //step2:执行sql
    9. ResultSet rs = dbconn.exeStmtS(sql);
    10. //step3:返回结果
    11. List<FoodInfo> list = new ArrayList<FoodInfo>();
    12. try {
    13. while(rs.next())
    14. {
    15. System.out.println(rs.getString(2));
    16. FoodInfo finfo = new FoodInfo();
    17. finfo.setFood_id(rs.getInt(1));
    18. finfo.setFood_name(rs.getString(2));
    19. finfo.setFood_price(rs.getFloat(3));
    20. finfo.setFood_img(rs.getString(4));
    21. finfo.setFood_desc(rs.getString(5));
    22. list.add(finfo);
    23. }
    24. pb.setRowDate(list);
    25. } catch (SQLException e) {
    26. // TODO Auto-generated catch block
    27. e.printStackTrace();
    28. }
    29. return pb;
    30. }
  3. 在业务层中调用DAO层的分页 完成分页的业务逻辑
    Java代码  
    1. public class FoodInfoBizImpl implements FoodInfoBiz {
    2. //声明foodInfoDao对象
    3. private  FoodInfoDao fid = null;
    4. public FoodInfoBizImpl(){
    5. fid = new FoodInfoDaoImpl();
    6. }
    7. public List<FoodInfo> foodInfoAll() {
    8. return fid.foodInfoAll();
    9. }
    10. public PageBean foodInfoByPage(int pageSize, int nowPage) {
    11. return fid.foodInfoByPage(pageSize, nowPage);
    12. }
    13. }
  4. 在servlet中的doPost()方法中 控制分页。每页显示的条目数 通过在web.xml 文件中配置参数实现,当前页数通过从jsp视图界面获取,之后将返回的pageBean放入request中  
    Java代码  
    1. int pageSize = Integer.parseInt(this.getServletConfig().getInitParameter("pageSize"));
    2. int nowPage = 1;
    3. if(request.getParameter("np")!=null)
    4. {
    5. nowPage = Integer.parseInt(request.getParameter("np"));
    6. }
    7. //step2:调用biz得到结果集
    8. FoodInfoBiz fbiz = new FoodInfoBizImpl();
    9. PageBean pb = fbiz.foodInfoByPage(pageSize, nowPage);//改变调用方法
    10. //step3:把结果集存储在媒介【session、request】中 request
    11. request.setAttribute("pageBean", pb);
    12. //step4:跳向index.jsp页面[response.sendRedirect - request必杀技]
    13. request.getRequestDispatcher("index.jsp").forward(request,response);//request跳向方式才能传值
  5. jsp页面中的实现 通过从request中获取pageBean 将其中的rowDate遍历循环出来 即可实现当前页的显示
    Java代码  
    1. <c:forEach items="${pageBean.rowDate}" var="fInfo">
    2. <td style="background-color:#E3EAEB;">
    3. <table style="width: 100%">
    4. <tr>
    5. <td style="width: 300px">
    6. <a href="FoodDetail?foodsid=11">
    7. <img  style="border:0px" src="UpFile/foodImage/${fInfo.food_img}" alt="" height="150" width="200"/></a></td>
    8. <td style="width: 550px; color: #000000; text-align: left">
    9. 食品名称: &nbsp;&nbsp; &nbsp;${fInfo.food_name }<br />
    10. 食品价格: &nbsp; &nbsp;${fInfo.food_price}<br />
    11. 所在类别: &nbsp; &nbsp;热菜<br/>
    12. 食品介绍: &nbsp; &nbsp; ${fInfo.food_desc}<br />
    13. <a  href="OnePro.htm?pid=1">餐品留言</a>
    14. <form action="AddCart" method="post" name="form1">
    15. <input name="txtCount" type="text"   style="width:27px;" />
    16. <input type="hidden" name="foodid" value="${fInfo.food_id }"/>
    17. <input type="hidden" name="foodname" value="${fInfo.food_name }"/>
    18. <input type="hidden" name="foodprice" value="${fInfo.food_price }"/>
    19. <input type="submit" name="ok" value="订餐"/>
    20. </form>
    21. </td>
    22. </tr>
    23. </table>
    24. </td>
    25. </c:forEach>
  6. 完成当前页的实现 即可来进行上一页 下一页的功能实现 只是传递当前页数即可
    Java代码  
    1. <table style="width: 100%">
    2. <tr>
    3. <td>
    4. 一共有<span  style="color:Red;">${pageBean.pageCount }</span>页</td>
    5. <td>
    6. 每页显示<span  style="color:Red;">${pageBean.pageSize }</span>条</td>
    7. <td> 当前为第<span  style="color:Red;">${pageBean.nowPage }</span>页</td>
    8. <td> 共<span  style="color:Red;">${pageBean.rowCount}</span>条</td>
    9. <td>
    10. <c:if test="${pageBean.nowPage !=1 }">
    11. <a href="IndexServlet?np=${pageBean.nowPage-1}"><img src="data:images/prev.gif" style="border-width:0px;" /></a>
    12. </c:if>
    13. <c:if test="${pageBean.nowPage !=pageBean.pageCount }">
    14. <a href="IndexServlet?np=${pageBean.nowPage+1}"> <img src="data:images/next.gif" style="border-width:0px;" /></a>
    15. </c:if>
    16. </td>
    17. </tr>
    18. </table>

    完成了 以上步骤 一个普通的分页 工具基本完成了....

转自  : hxlzpnyist.iteye.com/blog/1506631

通过sql语句查询实现分页相关推荐

  1. sql语句转化为分页查询的一种实现

    /*** 将sql语句转化为分页查询** */public static String addfy4oracle(String sql, int start, int limit, List args ...

  2. oracle分页查询sql语句通用,oracle分页查询sql语句,oracle分页查询sql语句详解

    oracle分页查询sql语句,oracle分页查询sql语句详解,Oracle分页查询sql语句 Oracle中分页和MySql中的分页不同,MySql中的分页使用关键字limit即可,相对简单一点 ...

  3. mysql hql查询语句_使用Query进行HQL语句查询和SQL语句查询

    HQL的语法比较简单,与普通SQL的区别之处是针对对象的不同,在查询语句中将sql中的表名替换成了sql中的持久化类名,因为hibernate机制是基于对象进行查询的. 不带参数的查询,语句是&quo ...

  4. Sql语句查询 显示序号

    怎么样用SQL语句查询出来带有序号,不是我们用递增所带的ID号 就是按行数用数字显示出来 序号,id,userid 1 5 aaa 2 6 bbb 3 8 ccc 4 9 ddd 5 17 eee 类 ...

  5. sql语句查询过慢的原因分析

    有时候你在使用sql语句查询数据库,sql语句写得好正确,但则发现执行查询的时候很慢呢?数据量也不是太大,你知道其中的原因吗?本文给大家讲解一下sql查询过慢的48种原因分析,请阅读. 1.没有索引或 ...

  6. thinkphp5基本的一些操作/API友好/获取请求信息(Request)/判断请求类型(GET...)/验证参数数据(Validate)/连接数据库/原生sql语句查询

    文章目录 一.API友好 1.举两个thinkphp5关于API友好的例子 (1)数据输出 (2)错误调试Trace 二.获取请求信息(Request) 1.获取URL信息 2.获取 模块/控制器/操 ...

  7. 一条SQL语句查询数据库中的所有表、存储过程、触发器

    一条SQL语句查询数据库中的所有表.存储过程.触发器 (sysobjects表信息)   该条语句查询返回所有的用户表 select * from sysobjects where xtype='u' ...

  8. 案例:用一条 SQL 语句查询出每门课都大于 80 分的学生姓名

    用一条sql语句查询出每门课都大于80分的学生姓名 首先需要进行分析: 要查询出每门课程都大于80分的学生姓名,因为一个学生有多门课程,所以会出现下面三种情况. 第一可能所有课程都大于80分. 第二可 ...

  9. 如何用SQL语句查询Excel数据

    Q:如何用SQL语句查询Excel数据? A:下列语句可在SQL SERVER中查询Excel工作表中的数据. 2007和2010版本: SELECT *  FROM OpenDataSource(  ...

最新文章

  1. linux线程10s没有得到调度,操作系统相关题目(附上答案)
  2. python视频延迟严重_【Python】改善 VideoCapture 的影像延迟
  3. shell 编程整合
  4. html里注释的写法正确的是,网页怎么注释语句 HTML的注释正确写法是?
  5. 从思维导图学习操作系统(三)
  6. 关于QMap的几点总结思考
  7. boost asio resolver
  8. 泛型型协变逆变_Java泛型类型简介:协变和逆变
  9. 前端学习(1338):mongoDB删除文档
  10. Blink, 通向哈里·波特的魔法世界
  11. Java依赖注入 - DI设计模式示例教程
  12. 1094:零起点学算法01——第一个程序Hello World!
  13. Flutter实战之Image和FadeInImage
  14. echarts2 的引入方式
  15. 如何通过DOI号来获取相关文献并下载?
  16. 石火电光追风逐日|前端优化之次时代图片压缩格式WebP的项目级躬身实践(Python3 PIL+Nginx)
  17. linux下多节点之间免密钥访问
  18. 字节跳动前端实习面试经历分享
  19. 第二十七篇:稳定性之故障处理【初识故障与传播方式】
  20. 解除网页无法选择文字_无法复制

热门文章

  1. 2022“杭电杯”中国大学生算法设计超级联赛(8)补题
  2. 那些工作中一不留神埋的雷
  3. 闵帆老师《论文写作》课程心得
  4. javaweb中四大域对象的生命周期与常用方法
  5. 单片机百科知识点---杂七杂八系列
  6. 浙江数字孪生数字化工厂三维激光扫描建模_三维可视化管理平台_吉优赛维_三维建模解决方案_3D模型
  7. LightOJ 1213 Fantasy of a Summation
  8. nexus安装详细过程(附安装包和下载地址)与nexus简介
  9. 《Excel 职场手册:260招菜鸟变达人》一第 4 招 身份证号码、银行卡号等超过15位数据的录入技巧...
  10. Spring(MVC)框架