【jsp 分页】mysql limit方式进行分页
项目结构示意图:
splitPage
|-com.balfish.bean Goods.java
|-com.balfish.dao GoodsDao.java
|-com.balfish.servlet MyServlet.java
|-com.balfish.util DbConnection.java
|-WEB-INF
|-lib
|-jstl-1.2.jar
|-mysql-connector-java-5.1.5-bin.jar
|-page
|-myPage.jsp
|-web.xml
要点: 单例 分层 jstl limit
访问地址: http://localhost:8080/splitPage/getPage
Goods.java
package com.balfish.bean;
public class Goods {
private int goodsId;
private String goodsName;
private float goodsPrice;
public int getGoodsId() {
return goodsId;
}
public void setGoodsId(int goodsId) {
this.goodsId = goodsId;
}
public String getGoodsName() {
return goodsName;
}
public void setGoodsName(String goodsName) {
this.goodsName = goodsName;
}
public float getGoodsPrice() {
return goodsPrice;
}
public void setGoodsPrice(float goodsPrice) {
this.goodsPrice = goodsPrice;
}
}
GoodsDao.java
package com.balfish.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import com.balfish.bean.Goods;
import com.balfish.util.DbConnection;
public class GoodsDao {
Connection conn;
PreparedStatement psmt;
ResultSet rs;
int pageSize = 5; //每页显示5条数据
public ResultSet executeQuery(String sql)throws Exception{
conn =DbConnection.getConnection();
psmt = conn.prepareStatement(sql);
rs = psmt.executeQuery(sql);
return rs;
}
//核心还是mysql的limit分页,然后暂存到内存中的ArrayList中
public ArrayList<Goods> getGoodsList(int currentPage) throws Exception{
ArrayList<Goods> GoodsList = new ArrayList<Goods>();
int beginRecord = (currentPage -1) * pageSize;
int endRecord = currentPage * pageSize;
rs = executeQuery("select * from goods limit " + beginRecord + "," + endRecord);
while(rs.next()){
Goods goods = new Goods();
goods.setGoodsId(rs.getInt(1));
goods.setGoodsName(rs.getString(2));
goods.setGoodsPrice(rs.getFloat(3));
GoodsList.add(goods);
}
return GoodsList;
}
public int getPageCount() throws Exception{
int total = 0;
int pageCount = 0;
rs = executeQuery("select count(*) from goods");
//得到分页的总页数,由于整数除法结果的取整形式,这里要用一点技巧进行处理
if(rs.next()){
total = rs.getInt(1);
pageCount =(total -1) /pageSize +1;
}
return pageCount ;
}
}
MyServlet.java
package com.balfish.servlet;
import java.io.IOException;
import java.util.ArrayList;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.balfish.bean.Goods;
import com.balfish.dao.GoodsDao;
public class MyServlet extends HttpServlet{
public void doGet(HttpServletRequest req , HttpServletResponse resp)
throws ServletException,IOException{
doPost(req, resp);
}
public void doPost(HttpServletRequest req , HttpServletResponse resp)
throws ServletException,IOException{
resp.setContentType("text/html");
String tmpCurrentPage = req.getParameter("currentPage");
//下面这几句挺无趣的,容易看的吃力,其实就是如果前面浏览过有页数标记则去读哪个页数,否则从第一页开始
int currentPage = 1;
if(tmpCurrentPage != null)
currentPage = Integer.parseInt(tmpCurrentPage);
GoodsDao goodsDao = new GoodsDao();
try{
ArrayList<Goods> GoodsList = goodsDao.getGoodsList(currentPage);
//把数据信息放到req作用域中,
req.setAttribute("GoodsList",GoodsList);
req.setAttribute("currentPage",currentPage);
req.setAttribute("pageCount",goodsDao.getPageCount());
req.getRequestDispatcher("/WEB-INF/page/myPage.jsp").forward(req,resp);
}catch(Exception e){
e.printStackTrace();
}
}
public void destroy(){
super.destroy();
}
public void init(ServletConfig config) throws ServletException {
super.init(config);
}
}
DbConnection.java
package com.balfish.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class DbConnection {
//抽象出单例,可作为模板
private static Connection conn = null;
private static String url = "jdbc:mysql://localhost/goods_test";
private static String username ="root";
private static String password ="";
private DbConnection(){
}
public static Connection getConnection() throws Exception{
Class.forName("com.mysql.jdbc.Driver");
if(conn == null)
conn = DriverManager.getConnection(url,username,password);
return conn;
}
}
sql.txt
create database goods_test;
use goods_test;
create table goods(
goodsId int,
goodsName varchar(20),
goodsPrice float
);
insert into goods values(1,'bag',68.8);
insert into goods values(2,'pen',10.0);
insert into goods values(3,'pencil',2.0);
insert into goods values(4,'mobile',968.8);
insert into goods values(5,'bag',68.8);
insert into goods values(6,'water',1.2);
myPage.jsp
<%@ page language ="java" import ="java.util.*" pageEncoding="utf-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv ="content-type" content="text/html;charset=utf-8">
</head>
<body>
<center>
<c:if test = "${currentPage >= 1 }">
<a href ="getPage?curentPage = 1">首页</a>
<a href ="getPage?currentPage=${ currentPage-1}">上一页</a>
</c:if>
<c:if test="${currentPage == 1 }">
<a href="getPage?currentPage=${ currentPage+1}">下一页</a>
<a href="getPage?currentPage=${ pageCount}">尾页</a>
</c:if>
<table width="%80" border="1" height="56" >
<tr align ="center">
<td>商品编号</td>
<td>商品名称</td>
<td>商品价格</td>
</tr>
<c:forEach var="goods" items="${GoodsList}">
<!-- 上面的GoodsList后面多些了一个} 就报下面意想不到的错误,查了好久...所以下次jstl表达式使用时一定注意
javax.el.PropertyNotFoundException: Property 'goodsId' not found on type java.lang.String -->
<tr align="center">
<td>${goods.goodsId }</td>
<td>${goods.goodsName }</td>
<td>${goods.goodsPrice }</td>
</tr>
</c:forEach>
</table>
</center>
</body>
</html>
web.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0"
metadata-complete="true">
<servlet>
<servlet-name>test1</servlet-name>
<servlet-class>com.balfish.servlet.MyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>test1</servlet-name>
<url-pattern>/getPage</url-pattern>
</servlet-mapping>
</web-app>
运行结果:
地址栏http://localhost:8080/splitPage/getPage?currentPage=2(类似这样~)
| 商品编号 | 商品名称 | 商品价格 |
| 1 | bag | 68.8 |
| 2 | pen | 10.0 |
| 3 | pencil | 2.0 |
| 4 | mobile | 968.8 |
| 5 | bag | 68.8 |
【jsp 分页】mysql limit方式进行分页的更多相关文章
- mysql limit查询(分页查询)探究
MySQL的Limit子句 LIMIT offset,length Limit子句可以被用于强制 SELECT 语句返回指定的记录数.Limit接受一个或两个数字参数.参数必须是一个整数常量.如果给定 ...
- Mysql 分页语句Limit用法
转载自:http://qimo601.iteye.com/blog/1634748 1.Mysql的limit用法 在我们使用查询语句的时候,经常要返回前几条或者中间某几行数据,这个时候怎么办呢?不用 ...
- MySQL分页优化中的“INNER JOIN方式优化分页算法”到底在什么情况下会生效?
本文出处:http://www.cnblogs.com/wy123/p/7003157.html 最近无意间看到一个MySQL分页优化的测试案例,并没有非常具体地说明测试场景的情况下,给出了一种经典的 ...
- mysql limit分页查询效率
对于有大数据量的mysql表来说,使用LIMIT分页存在很严重的性能问题. 查询从第1000000之后的30条记录: SQL代码1:平均用时6.6秒 SELECT * FROM `cdb_posts` ...
- 从官方文档中探索MySQL分页的几种方式及分页优化
概览 相比于Oracle,SQL Server 等数据库,MySQL分页的方式简单得多了,官方自带了分页语法 limit 语句: select * from test_t LIMIT {[offset ...
- mysql的sql分页函数limit使用
My sql数据库最简单,是利用mysql的LIMIT函数,LIMIT [offset,] rows从数据库表中M条记录开始检索N条记录的语句为: SELECT * FROM 表名称 LIMIT M, ...
- 如何优化Mysql千万级快速分页,limit优化快速分页,MySQL处理千万级数据查询的优化方案
如何优化Mysql千万级快速分页,limit优化快速分页,MySQL处理千万级数据查询的优化方案
- mysql的sql分页函数limit使用 (转)
http://www.cnblogs.com/beijingstruggle/p/5631603.html mysql的sql分页函数limit使用 My sql数据库最简单,是利用mysql的LIM ...
- Mysql分页之limit用法与limit优化
Mysql limit分页语句用法 与Oracle和MS SqlServer相比,mysql的分页方法简单的让人想哭. --语法: SELECT * FROM table LIMIT [offset, ...
随机推荐
- 《JS正则表达式》
1.精通 JS正则表达式: http://www.cnblogs.com/aaronjs/archive/2012/06/30/2570970.html 2.js常用正则表达式: http://www ...
- 多尺度二维离散小波分解wavedec2
对X进行N尺度小波分解 [C,S]=wavedec2(X,N,'wname'); clc,clear all,close all; load woman; [c,s]=wavedec2(X,2,'db ...
- Debian上安装java
Debian 8 Jessie上安装命令: echo "deb http://ppa.launchpad.net/webupd8team/java/ubuntu trusty main&qu ...
- digitalocean注册验证账户、激活账号教程
注册digitalocean账号很简单,使用优惠链接注册digitalocean还能赠送10美元余额,digitalocean vps是优秀的SSD VPS,最便宜的套餐只要5美元/月. 由于中国大陆 ...
- android 动态string
android开发过程之中,动态的插入string内容时候使用, 例如, <string name="time">当前时间:<xliff:g id="p ...
- nginx启动,重启,关闭
1.nginx启动: a. /usr/path/sbin/nginx -c [/etc/path/nginx.conf] 中括号中为指定加载的配置文件,不指定则加载默认配置文件 b. ...
- drupal7 安装百度编辑器Ueditor及后续使用
参考文章:drupal7安装百度编辑器ueditor 一.下载 1.需要下载安装的模块: 1.1.wysiwyg 1.2.ueditor 1.3Libraries 下载后安装在\sites\all\m ...
- Yii2.0的安装与配置教程
版权声明:本文为博主原创文章,未经博主允许不得转载. PHP版本需求:PHP5.4.0以上,因为Yii2.0基于PHP5.4以上版本进行了完全重写. 目前有两种方法可以安装Yii2.0,一种是安装Co ...
- 利用Ajax实现前端与.net后端实现数据交互
使用场景和需求:用户在地址栏输入请求地址,先.net服务器发送页面请求,该页面包含Echart图表,在页面中向.net后端发送数据请求,获取数据后,将数据填充到Echart图表中.其中包含带参与不带参 ...
- PMP培训感想
终于等到了C打头的邮件,等了几个星期,悬着的心终于放了.1P4M,基本跟平时模块成绩一致.当初模考时,第一次考了126,还算比较满意,毕竟还没开始苦逼看嘛,悲剧的是不管后面再怎么努力,成绩始终在1 ...