MySQL分页查询

一、在Dao类中写两种方法:获得总页数和指定页的数据

获得总页数

public int getPageCount(int pageSize) throws Exception{
        try {
            conn=DBConnection.getConnection();
            String sql="select count(*) from car";
            stat=conn.prepareStatement(sql);
            rs=stat.executeQuery();
            rs.next();
            int rowsCount=rs.getInt(1);
            int pageCount=(int)Math.ceil(1.0*rowsCount/pageSize);//算出总共需要多少页
            return pageCount;
        }
        finally{
            conn.close();
        }

获得指定页的数据

public ArrayList<Car> getPageCar(int pageNo,int pageSize) throws Exception{//两个形参分别为当前页,每页有多少行
        ArrayList<Car> list=new ArrayList<Car>();
        try {
            conn=DBConnection.getConnection();
            String sql="select * from car limit ?,?";
            stat=conn.prepareStatement(sql);
            stat.setInt(1, (pageNo-1)*pageSize);距离这一页的第一行数据,其前面有多少行数据
            stat.setInt(2, pageSize);//每页有多少行
            rs=stat.executeQuery();
            while(rs.next()){
                Car data=new Car();
                data.setCode(rs.getString(1));
                data.setName(rs.getString(2));
                data.setBrand(rs.getString(3));
                data.setTime(rs.getDate(4));
                data.setOil(rs.getDouble(5));
                data.setPowers(rs.getInt(6));
                data.setExhaust(rs.getInt(7));
                data.setPrice(rs.getDouble(8));
                data.setImage(rs.getString(8));
                list.add(data);
            }

        } finally{
        conn.close();
        }
        return list;
    }    

二、servlet处理数据

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取参数
        int pageNo=1;
        String s=request.getParameter("pgno");
        if(s!=null){
            pageNo=Integer.parseInt(s);
        }
        //处理数据
        try {
            int pageCount=new CarDao().getPageCount(PAGESIZE);//获得总页数
            ArrayList<Car> list=new CarDao().getPageCar(pageNo, PAGESIZE);//获得指定页数据
            int currentPage=pageNo;
            request.setAttribute("currentPage", currentPage);
            request.setAttribute("pageCount", pageCount);
            request.setAttribute("cars", list);
            int pagePrev=pageNo>1?pageNo-1:1;//上一页
            int pageNext=pageNo<pageCount?pageNo+1:pageCount;//下一页
            request.setAttribute("pageNow", pageNo);
            request.setAttribute("pagePrev", pagePrev);
            request.setAttribute("pageNext", pageNext);

        } catch (Exception e) {
            // TODO 自动生成的 catch 块
            e.printStackTrace();
        }

        //跳转
        request.getRequestDispatcher("home.jsp").forward(request, response);
    }

三、在jsp页面输出

<%@page import="com.itnba.maya.bean.Car"%>
<%@page import="java.util.ArrayList"%>
<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
<script>
function aaa(){
    document.getElementById("f1").submit();
}
</script>
</head>
<body>
<h1>汽车分页</h1>
<c:forEach items="${cars }" var="c">
<div>
<span style="width:100px;display:inline-block;">${c.code }</span>
<span style="width:300px;display:inline-block;">${c.name }</span>
</div>
</c:forEach>
<!--下面是分页链接 -->
<a href="show?pgno=1">首页</a>
<a href="show?pgno=${pagePrev }">上一页</a>

<c:forEach begin="1" end="${pageCount }" var="i">
<a href="show?pgno=${i }">${i }</a> &nbsp;
</c:forEach>
<a href="show?pgno=${pageNext }">下一页</a>
<a href="show?pgno=${pageCount }">尾页</a>
<form id="f1" method="get" action="show">
<select name="pgno" onchange="aaa()">
<c:forEach begin="1" end="${pageCount }" var="i">
<c:choose>
    <c:when test="${pageNow == i }">
        <option value="${i }" selected="selected" >${i }</option>
    </c:when>
    <c:otherwise>
        <option value="${i }">${i }</option>
    </c:otherwise>
</c:choose>
</c:forEach>
</select>
</form>
</body>
</html>

运行结果:

时间: 2024-10-12 07:25:40

MySQL分页查询的相关文章

sql server 与 mysql 分页查询以及创建临时表的区别

一: 分页查询的时候 sql server使用的是top关键字,而mysql 使用的是limit e.g: 查询第五个到第十个入职的职员 sql server2000: select top 6 * from emp where empno not in (select top 4 empno from emp order by hiredate) order by hiredate; mysql: select * from emp order by hire date limit 4,6;

mysql分页查询语法

一.limit语法 SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset LIMIT 子句可以被用于强制 SELECT 语句返回指定的记录数.LIMIT 接受一个或两个数字参数.参数必须是一个整数常量.如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目. 初始记录行的偏移量是 0(而不是 1); mysql> SELECT * FROM table LIMIT 5,10; // 检索记

MySQL分页查询性能优化

当需要从数据库查询的表有上万条记录的时候,一次性查询所有结果会变得很慢,特别是随着数据量的增加特别明显,这时需要使用分页查询.对于数据库分页查询,也有很多种方法和优化的点.下面简单说一下我知道的一些方法. 准备工作 为了对下面列举的一些优化进行测试,下面针对已有的一张表进行说明. 表名:order_history 描述:某个业务的订单历史表 主要字段:unsigned int id,tinyint(4) int type 字段情况:该表一共37个字段,不包含text等大型数组,最大为varcha

MySql分页查询慢|这里告诉你答案

一.背景 我们在开发的过程中使用分页是不可避免的,通常情况下我们的做法是使用limit加偏移量:select * from table where column=xxx order by xxx limit 1,20.当数据量比较小时(100万以内),无论你翻到哪一页,性能都是很快的.如果查询慢,只要在where条件和order by 的列上加上索引就可以解决.但是,当数据量大的时候(小编遇到的情况是500万数据),如果翻到最后几页,即使加了索引,查询也是非常慢的,这是什么原因导致的呢?我们该如

(记录)mysql分页查询,参数化过程的坑

在最近的工作中,由于历史遗留,一个分页查询没有参数化,被查出来有sql注入危险,所以对这个查询进行了参数化修改. 一看不知道,看了吓一跳,可能由于种种原因,分页查询sql是在存储过程中拼接出来的,where之后的条件也是在代码中先进行拼接,然后作为整体参数在传入存储过程里,在存入过程里又进行一次拼接.这样的话就有sql注入的潜在危险,尽管在拼接where之前进行的查询条件的验证. 大家都明白,参数化是防止sql注入的有效方法,然后就对这个分页查询进行大刀阔斧的改革. 思路一:1.对原先的代码中拼

mysql 分页查询 limit

每次都会忘掉limit,记录下来. 分页查询(limit 起始行,查询几行) -- 起始行从0开始 -- 分页:当前页  每页显示多少条 -- 分页查询当前页的数据的sql: SELECT * FROM student LIMIT (当前页-1)*每页显示多少条,每页显示多少条; -- 需求: 查询第1,2条记录(第1页的数据) SELECT * FROM student LIMIT 0,2; -- 查询第3,4条记录(第2页的数据) SELECT * FROM student LIMIT 2,

mysql分页原理和高效率的mysql分页查询语句

该博来自网络转载!!!供自己学习使用!!! 以前我在mysql中分页都是用的 limit 100000,20这样的方式,我相信你也是吧,但是要提高效率,让分页的代码效率更高一些,更快一些,那我们又该怎么做呢? 第一部分:看一下分页的基本原理: 代码如下: mysql explain SELECT * FROM message ORDER BY id DESC LIMIT 10000, 20***************** 1. row **************id: 1select_typ

六、mysql分页查询

参考url:https://www.bilibili.com/video/BV12b411K7Zu?p=132 应用场景:当要显示的数据,一页显示不全,需要分页提交SQL请求 语法: SELECT 查询列表 FROM 表1 [join type join 表2 ON 连接条件 WHERE 筛选条件 GROUP BY 分组字段 HAVING 分组后的筛选 ORDER BY 排序的字段] LIMIT offset,size; Offset要显示条目的起始索引(起始索引从0开始) Size要显示的条目

Mysql 分页查询

直奔主题 一.sql语句:select * from table limit startPageNum,everyPageNum 1)语句解析: table:你要查询的表 startPageNum:从多少条开始 everyPageNum:每页多少条数 二.以上的sql语句可以写成如下: select * from table limit (page*everyPageNum),everyPageNum 2)语句解析: table:你要查询的表 page:第几页 everyPageNum:每页多少