`
hxlzpnyist
  • 浏览: 44207 次
  • 性别: Icon_minigender_1
  • 来自: 信阳
社区版块
存档分类
最新评论

通过sql语句查询实现分页

 
阅读更多

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

代码实现如下:

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

相关推荐

    在SQL Server中通过SQL语句实现分页查询

    ### 在SQL Server中通过SQL语句实现分页查询 #### 一、背景介绍 在数据库应用开发中,分页查询是一种常见的技术手段,用于改善用户体验并提高系统性能。特别是当数据量庞大时,一次性加载所有数据到前端不仅会导致...

    使用SQL语句实现通用分页查询

    使用SQL语句实现通用分页查询,支持模糊查询等。

    关于SQL Server SQL语句查询分页数据的解决方案

    关于SQL Server SQL语句查询分页数据的解决方案 在日常工作中,我们经常需要处理大量数据,并从中获取特定页面的数据。特别是在Web应用开发中,为了提高用户体验,通常会将数据进行分页显示。针对这一需求,本文将...

    数据库分页SQL语句实现

    ### 数据库分页SQL语句实现 在开发MIS系统或Web应用系统时,经常会遇到对数据库进行分页处理的需求。这是因为数据量庞大时,一次性加载所有数据会给系统带来很大的负担,同时也会影响用户体验。因此,分页技术成为...

    oracle-jdbc分页实现(只需传入sql语句即可实现分页)

    Oracle JDBC分页实现是数据库操作中的一个重要环节,尤其是在处理大量数据时,为了提高用户体验和系统性能,分页查询显得尤为重要。Oracle数据库提供了多种方法来实现分页查询,其中包括使用ROWNUM伪列、游标...

    用标准的SQL语句实现查询记录分页

    其中,如何使用标准的SQL语句实现查询记录分页,是数据库操作中一个常见且实用的需求。分页查询不仅能够提高数据检索的效率,还能优化用户体验,尤其是在处理大量数据时显得尤为重要。下面,我们将详细解析几种实现...

    sqlserver分页查询语句

    sqlserver分页查询语句;sqlserver分页查询语句;sqlserver分页查询语句;

    利用标准的SQL语句实现查询记录分页

    本文主要探讨如何使用标准SQL语句来实现查询记录的分页功能。 首先,我们要理解分页的基本原理。在网页展示大量数据时,一次性加载所有记录不仅可能导致页面加载速度变慢,还可能消耗大量服务器资源。因此,通常...

    用ORACLE的SQL语句实现多栏分页输出

    用ORACLE的SQL语句实现多栏分页输出.RTF

    通用的存储过程sql分页查询语句

    存储过程是一组预先编译好的SQL语句,存储在数据库服务器中,可以按需调用执行。它的优点包括提高性能、减少网络流量、增强安全性以及简化复杂的操作。在分页查询场景下,创建一个存储过程可以有效地封装分页逻辑,...

    用SQL语句实现分页(Oracle版Sql Server版)

    ### 使用SQL语句实现分页(Oracle与SQL Server版本)...综上所述,通过SQL语句实现分页是一项非常实用的技术,特别是在处理大量数据时。开发者可以根据所使用的数据库类型选择最适合的方法来实现高效、简洁的分页查询。

    Oracle Sql语句转换成Mysql Sql语句

    OracleSqlConvert4MysqlSqlTool.java这个源码工具,根据描述,应该是实现了自动读取Oracle SQL语句,分析其结构,并根据MySQL的语法规则进行转换,然后将转换后的SQL语句保存到指定的目标文件中。这个工具简化了手动...

    LINQ To SQL实现分页效果源码

    由于LINQ延迟执行,直到你真正遍历结果集时才会执行SQL语句。 ```csharp foreach (var customer in pagedQuery) { // 处理每个customer对象 } ``` 5. **优化性能**:在某些情况下,为了提高性能,你可能需要...

    三种数据库利用SQL语句进行高效果分页,分页

    本文将详细介绍如何在三种主流数据库系统——SQL Server、Access 和 Oracle 中利用 SQL 语句实现高效分页。 1. SQL Server 和 Access 数据库 在 SQL Server 和 Access 这两个微软数据库中,可以使用 `TOP` 关键字...

    Oracle,SQl,MySql实现分页查询

    这种方法需要拼接SQL语句。 **Oracle实现** Oracle 不支持 `SELECT TOP` 语法,因此需要采用其他方式来实现类似的功能。可以使用 `ROWNUM` 来限制返回的行数。 ```sql SELECT * FROM ( SELECT A.*, ROWNUM RN ...

    分页sql语句以及sql语句语法大全

    提供详细的sql语句,常用sql语句,sql语句的进阶过程

    几条常见的数据库分页SQL 语句

    几条常见的数据库分页SQL 语句,针对oracle,sqlserver,mysql三种常见数据库的分页显示。

    c#\book\实现分页的sql语句

    本文将深入探讨如何在C#\book项目中,利用SQL语句来实现数据分页。 ### SQL分页基本原理 SQL分页主要通过限制查询结果的数量来实现。在SQL Server中,常用的分页方法有两种:一种是使用`OFFSET`和`FETCH`关键字;...

    jdbc 分页 sql语句

    ### JDBC分页SQL语句详解 #### 一、引言 在数据库操作中,分页查询是非常...通过理解ROWNUM、子查询以及INNER JOIN等概念,我们不仅可以编写出高效的SQL语句,还能更好地优化应用程序性能。希望本文能对你有所帮助!

Global site tag (gtag.js) - Google Analytics