servlet实现mysql数据库分页
一、分页所需要的sql语句准备
select * from table limit m,n
其中m是指记录开始的index,从0开始,表示第一条记录
n是指从第m+1条开始,取n条。
例如:
select * from tablename limit 2,4
即取出第3条至第6条,4条记录
第n页 每页x条 则用语句 limit (n-1)* x ,x
计算总共需要多少页: t表示总条 x表示每页显示多少条 总页数为:(t+x-1)/x
二、具体实现
1、dao层,接口实现
package com.aaa.dao; import java.util.List;
import java.util.Map; import java.util.List;
import java.util.Map; /**
* 分页查询
*/ public interface IPageDAO { /**
*
* 第n页 每页x条 limit (n-1)* x ,x
* t总共的条数 x一页显示多少count 总:(t+x-1)/x
*
*/ /**
* 参数:页码,一页显示的条数
* 返回值:List<Map<String, Object>
*/ List<Map<String, Object>> getPage(int page, int count);
}
2、dao接口的实现类
package com.aaa.dao.impl; import com.aaa.dao.IPageDAO;
import com.aaa.util.DBUtil; import java.util.List;
import java.util.Map; public class PageDAOImpl implements IPageDAO {
@Override
public List<Map<String, Object>> getPage(int page, int count) { //使用了拼接,将传过来的页码与每页显示的条数拼接在sql语句中
String sql="select * from product LIMIT "+page+","+count;
System.out.println(sql);
return DBUtil.executeQuery(sql);
}
}
3、servlet业务处理
package com.aaa.servlet; import com.aaa.dao.IPageDAO;
import com.aaa.dao.impl.PageDAOImpl; import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
import java.util.Map; @WebServlet("/page")
public class PageServlet extends HttpServlet { @Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //获取从前台页面穿过来 的页码数,如果需要传每个页面显示的条数,也可以参数接收
String a = req.getParameter("a"); //调用dao,查询数据
IPageDAO dao=new PageDAOImpl();
List<Map<String, Object>> page = dao.getPage(Integer.parseInt(a), 10); // 共享参数,将所有的商品信息共享
req.setAttribute("allProduct",page); // 请求转发到 index.jsp 页面
req.getRequestDispatcher("/views/index.jsp").forward(req,resp);
}
}
4、jsp页面的分页设计
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"+"views/";
%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <!DOCTYPE HTML>
<html>
<head>
<style>
.page{
text-align: center;
margin-top: 50px;
}
.page a{
text-decoration: none;
border:1px solid #f9d52b;
padding: 5px 7px;
color: #767675;
cursor: pointer;
}
</style>
</head> <body>
<%--分页部分--%>
<div class="page">
<span>上一页</span>
<a href="/shop/page?a=1">1</a>
<a href="/shop/page?a=2">2</a>
<a href="/shop/page?a=3">3</a>
<a href="/shop/page?a=4">4</a>
<a href="/shop/page?a=5">5</a>
<span>下一页</span>
</div>
</body>
</html>
servlet实现mysql数据库分页的更多相关文章
- Statement和PreparedStatement的特点 MySQL数据库分页 存取大对象 批处理 获取数据库主键值
1 Statement和PreparedStatement的特点 a)对于创建和删除表或数据库,我们可以使用executeUpdate(),该方法返回0,表示未影向表中任何记录 b)对于创建和 ...
- jsp-3 简单的servlet连接mysql数据库 使用mvc的登录注册
简单的servlet连接mysql数据库 使用mvc的登录注册 commons-dbutils-1.6 mysql-connector-java-5.1.40-bin c3p0-0.9.5.2 mch ...
- oracle sqlserver mysql数据库分页
1.Mysql的limit用法 在我们使用查询语句的时候,经常要返回前几条或者中间某几行数据,这个时候怎么办呢?不用担心,mysql已经为我们提供了这样一个功能. SELECT * FROM tabl ...
- jsp-2 简单的servlet连接mysql数据库 增删改查
连接mysql数据库的操作 有增删改查 用的包有 commons-lang3-3.5 mysql-connector-java-5.1.40-bin 但是实际上也就是 数据查询和数据处理两种 所以对数 ...
- MySQL 数据库 分页查询
在使用MySQL 进行数据库分页查询的时候最主要是使用LIMIT子句进行查询: 首先来看一下LIMIT: LIMIT子句可以用来限制由SELECT语句返回过来的数据数量,它有一个或两个参数,如果给出两 ...
- servlet连接mysql数据库和oracle数据库
连接mysql数据库 package dao; import java.sql.Connection; import java.sql.DriverManager; import java.sql.P ...
- html文件form表单action调用servlet连接mysql数据库实例
web.xml文件 <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi=&qu ...
- EntityFrameWork使用MySql数据库分页的BUG
环境 使用MySQL Connector NET 6.7.4+EF5.0+VS2010 问题描述 IQueryable<T>类型的Where方法和Skip或Take方法一起使用时,生成的S ...
- mysql数据库分页查询优化
原博:MySQL单表百万数据记录分页性能优化 limit优化 当数据很多需要进行分页查询时:需要先查出第一条数据的id然后根据id查询大于id的数据 limt 一页的数据量 1. 直接用limit ...
随机推荐
- cok-filter
小工具 # -*- coding: utf-8 -*- import pandas as pd def filterExcel(cokpath, keywords): df = pd.read_exc ...
- 转发 Delphi中线程类TThread 实现多线程编程
Delphi中有一个线程类TThread是用来实现多线程编程的,这个绝大多数Delphi书藉都有说到,但基本上都是对TThread类的几个成员作一简单介绍,再说明一下Execute的实现和Synchr ...
- pip改源
临时 python -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple django==1.10 # ==后边指定版本号,也可以不指定 ...
- MFC如何添加bmp文件和ICO文件
1.添加BMP格式文件如下图所示: 2.添加ICO格式文件如下图所示:
- Google SketchUp Cookbook: (Chapter 1) Making Multiple Copies
软件环境 SketchUp Pro 2018 参考书籍 Google SketchUp Cookbook http://shop.oreilly.com/product/9780596155100.d ...
- spring从服务器磁盘读取图片,然后显示于前端页面上
需求是,前台通过传参,确定唯一图片,然后后台在服务器磁盘中读取该图片,然后显示于前台页面上. 后台代码: @RequestMapping("unit/bill/showeinvoice&qu ...
- 编译问题:'<invalid-global-code>' does not contain a definition for 'Store' and no extension method 'XXX' accepting a first argument of type '<invalid-global-code>' could be found
这是VS2015上的bug. 我碰到的时候,是VS在合并两个分支的代码时,多加了一个}.导致编译语法报错.. 解决办法就是在错误的附近,找找有没有多余的大括号,删掉即可. 这个问题在vs2017上面没 ...
- JMeter4.0源码导入Eclipse记录
参考: https://blog.csdn.net/yue530tomtom/article/details/77870233?locationNum=10&fps=1 1.准备jdk环境 下 ...
- vs2015 iis express启动不了及安装DotNetCore.1.0.0-VS2015Tools.Preview2失败的解决方法
直接用管理员账户打开cmd,进入exe所在的文件夹在运行命令DotNetCore.1.0.0-VS2015Tools.Preview2.exe SKIP_VSU_CHECK=1不要加引号. PS:如果 ...
- Linux基本指令
常用目录文件作用 - / 根目录 - /bin 命令保存目录(普通用户就可以读取的命令) - /boot 启动目录,启动相关文件 - /dev 设备文件保存目录 - /etc ...