分页的分析

分页的分析:
这是一个基于mysql的分页,分页的是时候只用总数和要显示的数据是查询出来!其他的是计算出来的,
//设置每页显示的行数
int pageSize = 5;
//这里模拟点击的页数
int currentPage = 4;
//把的一页设置成一,当然也可以设置成0;
int beginPage = 1;
在设置完了这些基本的参数后下面就是求出数据库的总数,使用count函数来统计,
使用dbutil这个工具实现
是用dbutil的QueryRunner 方法 这个方法简化了查询语句

查询总数的代码如下
String count = "select count(*) from product; ";
try {
Integer totalCount = run.query(conn, count,
new ResultSetHandler<Long>() {

public Long handle(ResultSet rs) throws SQLException {
while (rs.next()) {
return rs.getLong(1);
}
return 0l;
}
}, new Object[] {}).intValue();

在得到了总数的情况下毫无疑问的就是开始计算 ‘总页数’ ‘上一页’ ‘下一页’
‘尾页’ ‘开始数’

总页数的计算方法:
总页数 = 总量/每页显示的数量 ,再加一些判断就OK了
Integer totalPage = totalCount % pageSize >0 ? totalCount /pageSize+1: totalCount /pageSize

上页的计算方法:
如果当前页面—1 小于了beginPage(首页) 上页就等于首页 否则 currentPage (当前)页面—1;
Integer next = currentPage + 1 >= totalPage ? totalPage: currentPage + 1;

尾页就等于总页数
使用LIMIT 函数来求道需要的数据
LIMIT里面有两个参数 第一个参数是从什么地方开始查,第二个参数是差多少个
实现代码如下
// 总页数
Integer totalPage = (totalCount) % (pageSize) > 0 ? (totalCount)
/ (pageSize) + 1 : (totalCount) / (pageSize);
// 上一页
Integer previous = currentPage - 1 < beginPage ? previous = beginPage
: currentPage - 1;
// 下一页
Integer next = currentPage + 1 >= totalPage ? totalPage
: currentPage + 1;
// 尾页
Integer endPage = totalPage;
// 开始数
Integer start = (currentPage - 1) * pageSize;
String sql = "SELECT * FROM product LIMIT ?,?";
List<String> list = run.query(conn, sql,
new ResultSetHandler<List<String>>() {
public List<String> handle(ResultSet rs)
throws SQLException {
List<String> list = new ArrayList<String>();
while (rs.next()) {
list.add(rs.getString("productName"));
}
return list;
}

}, start, pageSize);
整个应用的代码如下:这是一个纯JDBC的分页,
package com.ttw.util;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
import org.junit.Test;

public class PaginationDemo {
MySQLutil mysql;

public PaginationDemo() {
mysql = MySQLutil.getInstance();
}

@Test
public void test() {
// 每页数
int pageSize = 6;
// 当前页
int currentPage = 2;
// 第一页
int beginPage = 1;
Connection conn = null;

conn = mysql.getConnection();
QueryRunner run = new QueryRunner();
String count = "select count(*) from product; ";
try {
Integer totalCount = run.query(conn, count,
new ResultSetHandler<Long>() {

public Long handle(ResultSet rs) throws SQLException {
while (rs.next()) {
return rs.getLong(1);
}
return 0l;
}
}, new Object[] {}).intValue();
// 总页数
Integer totalPage = (totalCount) % (pageSize) > 0 ? (totalCount)
/ (pageSize) + 1 : (totalCount) / (pageSize);
// 上一页
Integer previous = currentPage - 1 < beginPage ? previous = beginPage
: currentPage - 1;
// 下一页
Integer next = currentPage + 1 >= totalPage ? totalPage
: currentPage + 1;
// 尾页
Integer endPage = totalPage;
// 开始数
Integer start = (currentPage - 1) * pageSize;
String sql = "SELECT * FROM product LIMIT ?,?";
List<String> list = run.query(conn, sql,
new ResultSetHandler<List<String>>() {
public List<String> handle(ResultSet rs)
throws SQLException {
List<String> list = new ArrayList<String>();
while (rs.next()) {
list.add(rs.getString("productName"));
}
return list;
}

}, start, pageSize);
System.out.println(list);
System.out.println("首页: " + beginPage);
System.out.println("上一页: " + previous);
System.out.println("下一页: " + next);
System.out.println("尾页: " + endPage);
System.out.println("一共: " + totalCount + " 条");
System.out.println("当前是: " + currentPage + "/" + totalPage);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值