zoukankan      html  css  js  c++  java
  • mySql分页

    Sql 分页查询语句 : select * from goods limit ?,?

    limit 开始查询位置(从0开始,0对应数据库中的第一条数据),查询记录的条数

    GoodsDao.java:

    //每页记录数
        private int pagesize = 6;
    //根据page查询该页的记录
        public List<Goods> findByPage(int page) throws SQLException {
            if(page < 1){
                page = 1;
            }
            int offset = 0;
            String sql = "select * from tdb_goods limit ?,?";
            //QueryRunner Dbutil 数据库链接池 提供的对象
            //JDBCUtil_DBCP.getDataSource() 通过工具类得到一个数据源
            QueryRunner queryRunner = new QueryRunner(JDBCUtil_DBCP.getDataSource());
            Object[] params = {offset + (page - 1) * pagesize,pagesize};
            List<Goods> list = null;
            try {
                list = (List<Goods>) queryRunner.query(sql, new BeanListHandler(Goods.class),params);
            } catch (SQLException e) {
                throw new SQLException("查找失败");
            }
            return list;
        }
        //查询记录数并返回最大页数
        public int maxpage(){
            String sql = "select count(*) from tdb_goods";
            QueryRunner queryRunner = new QueryRunner(JDBCUtil_DBCP.getDataSource());
            int maxpage = 1;
            try {
                int count = Integer.parseInt(((Long)(((Object[]) queryRunner.query(sql, new ArrayHandler()))[0])).toString());
                maxpage = count % pagesize == 0? count / pagesize : count / pagesize + 1;
            } catch (SQLException e) {
                e.printStackTrace();
            }
            return maxpage;
        } 

    Service.java:

    public class Service {
        GoodsDao goodsDao =new GoodsDao();//根据页数查询数据
        public List<Goods> show_goos(int page){
            try {
                return goodsDao.findByPage(page);
            } catch (SQLException e) {
                System.out.println(e.getMessage());;
            }
            return null;
        }
        //获得最大页数
        public int getmaxPage() {
            return goodsDao.maxpage();
        }
    }

    Servlet.java:

    import java.io.IOException;
    import java.util.List;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import com.hyl.bean.Goods;
    import com.hyl.service.Service;
    
    public class MyServlet extends HttpServlet {
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp)
                throws ServletException, IOException {
            Service service = new Service();
            //判断页面传过来的page数
            int maxpage = service.getmaxPage();
            if(req.getParameter("page")==null){
                //设置初始默认第一页
                req.setAttribute("page", 1); 
            }else if(Integer.parseInt(req.getParameter("page"))>maxpage){
                //设置默认最大为maxpage
                req.setAttribute("page", maxpage);
            }else if(Integer.parseInt(req.getParameter("page"))==0){
                //设置设置默认最大为maxpage
                req.setAttribute("page", maxpage);
            }else{
                //设置当前页数(便于jsp中给当前页设置特殊属性)
                req.setAttribute("page", Integer.parseInt(req.getParameter("page"))); 
            }
            List<Goods> list = service.show_goos(Integer.parseInt(req.getAttribute("page").toString()));
            req.setAttribute("maxpage", maxpage); 
            req.setAttribute("list", list); 
            getServletContext().getRequestDispatcher("/goods.jsp").forward(req, resp);
    
        }
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp)
                throws ServletException, IOException {
            doPost(req, resp);
        }
    }

    用于展示数据的jsp页面:goods.jsp

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    
    <title>goods page</title>
    
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    
    </head>
    <body>
        <table border="1px">
            <tr>
                <td>编号</td>
                <td>商品</td>
                <td>类型</td>
                <td>厂商</td>
                <td>价格</td>
                <td>是否出售</td>
                <td>是否售空</td>
            </tr>
            <c:forEach var="g" items="${list}">
                <tr>
                    <td>${g.goods_id}</td>
                    <td>${g.goods_name}</td>
                    <td>${g.goods_cate}</td>
                    <td>${g.brand_name}</td>
                    <td>${g.goods_price}</td>
                    <td>${g.is_show}</td>
                    <td>${g.is_saleoff}</td>
                </tr>
            </c:forEach>
        </table>
        <c:if test="${page!=1}">
            <a href="myservlet?page=1">首页</a>
        </c:if>
        <c:if test="${page>1}">
            <a href="myservlet?page=${page-1 }">上一页</a>
        </c:if>
            <c:forEach begin="1" step="1" end="${maxpage }" var="a">
                <c:choose>
                    <c:when test="${page==a}">
                        <a href="myservlet?page=${a}" style="color: red">${a}</a>&nbsp;
                    </c:when>
                    <c:otherwise>
                        <a href="myservlet?page=${a}">${a}</a>&nbsp;
                    </c:otherwise>
                </c:choose>
            </c:forEach>
            
        <c:if test="${page<maxpage}">
            <a href="myservlet?page=${page+1 }">下一页</a>
        </c:if>
        <c:if test="${page!=maxpage}">
            <a href="myservlet?page=${maxpage}">尾页</a>
        </c:if>
    </body>
    </html>

    注:servlet与jsp页面传值过程中变量名要一致(细节问题)

    补:EL表达式中c:forEach中的items不可为单一的一个对象或是基本数据,会报错

    结果如下:

    Over



  • 相关阅读:
    Java JPA 入门
    Java JSP 常用标签及自定义标签
    Collection 之 Set、List和Map
    Socket 详解
    MyEclipse 配置SQL Server 2008数据库驱动
    IO 常用IO操作类继承结构 及简单简介
    JSP 相关对象
    Android 入门体验
    C#访问修饰符总结
    C# Socket编程 同步以及异步通信
  • 原文地址:https://www.cnblogs.com/hyl-home/p/7358531.html
Copyright © 2011-2022 走看看