java中如何实现分页显示一个简单的JAVA分页方法
定义两个Vectorjava简单分页代码,一个为储存查询所有记录的totalV,另一个储存当前页的记录currentPageV;
总的记录数java简单分页代码:int totalSize = totalV.getSize();
每页显示的记录数:int countPerPage;
总页数:int totalPageNum = totalSize/countPerPage;
//如果总的记录数和每页记录数的余数大于零 ,
//那么总的页数为他们的整除结果加一
if (totalSize%countPerPage0 ){
totalPageNum = totalSize/countPerPage1;
}
当前的页数:pageNum;
for (int j = 0;jtotalV.size();j){
//分页,根据当前的页数和每页显示的记录数从totalV中取出记录
//往currentPageV中添加记录;
//如果当前记录在(当前页码-1)*每页显示记录数(包括等于)
//和 当前页码*每页显示记录数(不包括等于)之间的时候;
//就属于该页的数据
if ( (j = (pageNum - 1) * countPerPage)(jpageNum * countPerPage)) {
currentPageV.addElement(totalV.get(j));
}
//当currentPageV记录数等于每页显示记录数,
//停止往currentPageV中添加记录
if (currentPageV.size() == countPerPage) {
break;
}
}
那么,当前页中显示的记录,就是currentPageV中的记录 。
第二个分页
在使用数据库的过程中,不可避免的需要使用到分页的功能,可是JDBC的规范对此却没有很好的解决 。对于这个需求很多朋友都有自己的解决方案,比如使用Vector等集合类先保存取出的数据再分页 。但这种方法的可用性很差 , 与JDBC本身的接口完全不同 , 对不同类型的字段的支持也不好 。这里提供java简单分页代码了一种与JDBC兼容性非常好的方案 。
JDBC和分页
Sun的JDBC规范的制定 , 有时很让人哭笑不得,在JDBC1.0中,对于一个结果集(ResultSet)你甚至只能执行next()操作,而无法让其向后滚动,这就直接导致在只执行一次SQL查询的情况下无法获得结果集的大小 。所以,如果你使用的是JDBC1.0的驱动 , 那么是几乎无法实现分页的 。
好在Sun的JDBC2规范中很好的弥补了这一个不足 , 增加了结果集的前后滚动操作,虽然仍然不能直接支持分页,但java简单分页代码我们已经可以在这个基础上写出自己的可支持分页的ResultSet了 。
和具体数据库相关的实现方法
有一些数据库,如Mysql, Oracle等有自己的分页方法,比如Mysql可以使用limit子句 , Oracle可以使用ROWNUM来限制结果集的大小和起始位置 。这里以Mysql为例,其典型代码如下:
// 计算总的记录条数
String SQL = "SELECT Count(*) AS total "this.QueryPart;
rs = db.executeQuery(SQL);
if (rs.next())
Total = rs.getInt(1);
// 设置当前页数和总页数
TPages = (int)Math.ceil((double)this.Total/this.MaxLine);
CPages = (int)Math.floor((double)Offset/this.MaxLine 1);
// 根据条件判断,取出所需记录
if (Total0) {
SQL = Query" LIMIT "Offset" , "MaxLine;
rs = db.executeQuery(SQL);
}
return rs;
}
毫无疑问,这段代码在数据库是Mysql时将会是漂亮的 , 但是作为一个通用的类(事实上我后面要提供的就是一个通用类库中的一部分),需要适应不同的数据库 , 而基于这个类(库)的应用,也可能使用不同的数据库,所以,我们将不使用这种方法 。
另一种繁琐的实现方法
我看过一些人的做法(事实上包括我在内,一开始也是使用这种方法的),即不使用任何封装,在需要分页的地方 , 直接操作ResultSet滚到相应的位置,再读取相应数量的记录 。其典型代码如下:
%
sqlStmt = sqlCon.createStatement(java.sql.ResultSet.TYPE_SCROLL_INSENSITIVE,
java.sql.ResultSet.CONCUR_READ_ONLY);
strSQL = "select name,age from test";
//执行SQL语句并获取结果集
sqlRst = sqlStmt.executeQuery(strSQL);
//获取记录总数
sqlRst.last();
intRowCount = sqlRst.getRow();
//记算总页数
intPageCount = (intRowCount intPageSize-1) / intPageSize;
//调整待显示的页码
if(intPageintPageCount) intPage = intPageCount;
%
table border="1" cellspacing="0" cellpadding="0"
tr
th姓名/th
th年龄/th
/tr
%
if(intPageCount0){
//将记录指针定位到待显示页的第一条记录上
sqlRst.absolute((intPage-1) * intPageSize1);
//显示数据
i = 0;
while(iintPageSize!sqlRst.isAfterLast()){
%
tr
td%=sqlRst.getString(1)%/td
td%=sqlRst.getString(2)%/td
/tr
%
sqlRst.next();
i;
}
}
%
/table
很显然 , 这种方法没有考虑到代码重用的问题,不仅代码数量巨大,而且在代码需要修改的情况下 , 将会无所适从 。
使用Vector进行分页
还见过另一些实现分页的类 , 是先将所有记录都select出来,然后将ResultSet中的数据都get出来,存入Vector等集合类中,再根据所需分页的大?。?页数,定位到相应的位置,读取数据 。或者先使用前面提到的两种分页方法 , 取得所需的页面之后,再存入Vector中 。
扔开代码的效率不说,单是从程序结构和使用的方便性上讲,就是很糟糕的 。比如,这种做法支持的字段类型有限,int, double, String类型还比较好处理,如果碰到Blob, Text等类型,实现起来就很麻烦了 。这是一种更不可取的方案 。
一个新的Pageable接口及其实现
很显然,看过上面三种实现方法后 , 我们对新的分页机制有了一个目标,即:不与具体数据库相关;尽可能做到代码重用;尽可能与原JDBC接口的使用方法保持一致;尽可能高的效率 。
首先,我们需要提供一个与java.sql.ResultSet向下兼容的接口,把它命名为Pageable,接口定义如下:
public interface Pageable extends java.sql.ResultSet{
/**返回总页数
*/
int getPageCount();
/**返回当前页的记录条数
*/
int getPageRowsCount();
/**返回分页大小
*/
int getPageSize();
/**转到指定页
*/
void gotoPage(int page) ;
/**设置分页大小
*/
void setPageSize(int pageSize);
/**返回总记录行数
*/
int getRowsCount();
/**
* 转到当前页的第一条记录
* @exception java.sql.SQLException 异常说明 。
*/
void pageFirst() throws java.sql.SQLException;
/**
* 转到当前页的最后一条记录
* @exception java.sql.SQLException 异常说明 。
*/
void pageLast() throws java.sql.SQLException;
/**返回当前页号
*/
int getCurPage();
}
这是一个对java.sql.ResultSet进行了扩展的接口 , 主要是增加了对分页的支持,如设置分页大?。侥骋灰?nbsp;, 返回总页数等等 。
接着,我们需要实现这个接口 , 由于这个接口继承自ResultSet,并且它的大部分功能也都和ResultSet原有功能相同,所以这里使用了一个简单的Decorator模式 。
PageableResultSet2的类声明和成员声明如下:
public class PageableResultSet2 implements Pageable {
protected java.sql.ResultSet rs=null;
protected int rowsCount;
protected int pageSize;
protected int curPage;
protected String command = "";
}
可以看到,在PageableResultSet2中,包含了一个ResultSet的实例(这个实例只是实现了ResultSet接口,事实上它是由各个数据库厂商分别实现的),并且把所有由ResultSet继承来的方法都直接转发给该实例来处理 。
PageableResultSet2中继承自ResultSet的主要方法:
//……
public boolean next() throws SQLException {
return rs.next();
}
//……
public String getString(String columnName) throws SQLException {
try {
return rs.getString(columnName);
}
catch (SQLException e) {//这里是为了增加一些出错信息的内容便于调试
throw new SQLException (e.toString() " columnName="
columnName " SQL=" this.getCommand());
}
}
//……
只有在Pageable接口中新增的方法才需要自己的写方法处理 。
/**方法注释可参考Pageable.java
*/
public int getCurPage() {
return curPage;
}
public int getPageCount() {
if(rowsCount==0) return 0;
if(pageSize==0) return 1;
//calculate PageCount
double tmpD=(double)rowsCount/pageSize;
int tmpI=(int)tmpD;
if(tmpDtmpI) tmpI;
return tmpI;
}
public int getPageRowsCount() {
if(pageSize==0) return rowsCount;
if(getRowsCount()==0) return 0;
if(curPage!=getPageCount()) return pageSize;
return rowsCount-(getPageCount()-1)*pageSize;
}
public int getPageSize() {
return pageSize;
}
public int getRowsCount() {
return rowsCount;
}
public void gotoPage(int page) {
if (rs == null)
return;
if (page1)
page = 1;
if (pagegetPageCount())
page = getPageCount();
int row = (page - 1) * pageSize1;
try {
rs.absolute(row);
curPage = page;
}
catch (java.sql.SQLException e) {
}
}
public void pageFirst() throws java.sql.SQLException {
int row=(curPage-1)*pageSize 1;
rs.absolute(row);
}
public void pageLast() throws java.sql.SQLException {
int row=(curPage-1)*pageSize getPageRowsCount();
rs.absolute(row);
}
public void setPageSize(int pageSize) {
if(pageSize=0){
this.pageSize=pageSize;
curPage=1;
}
}
//PageableResultSet2的构造方法:
public PageableResultSet2(java.sql.ResultSet rs) throws java.sql.SQLException {
if(rs==null) throw new SQLException("given ResultSet is NULL","user");
rs.last();
rowsCount=rs.getRow();
rs.beforeFirst();
this.rs=rs;
}
/*如果要提高效率,可以利用select count(*) 语句取得所有记录数,注释掉
构造函数的rs.last();rowsCount=rs.getRow();rs.beforeFirst();三句 。
在调用构造函数后调用此方法获得所有的记录,参数是select count(*)后的结果集
*/
public void setRowsCount(java.sql.ResultSet rs)throws java.sql.SQLException {
if(rs==null) throw new SQLException("given ResultSet is NULL","user");
rowCount=rs.getInt(1);
}
这里只是简单的取得一个总记录数,并将记录游标移回初始位置(before first) , 同时将参数中的ResultSet赋给成员变量 。
Pageable的使用方法
因为Pageable接口继承自ResultSet , 所以在使用方法上与ResultSet一致 , 尤其是在不需要分页功能的时候,可以直接当成ResultSet使用 。而在需要分页时,只需要简单的setPageSize, gotoPage,即可 。
PreparedStatement pstmt=null;
Pageable rs=null;
……//构造SQL,并准备一个pstmt.
rs=new PageableResultSet2(pstmt.executeQuery());//构造一个Pageable
rs.setPageSize(20);//每页20个记录
rs.gotoPage(2);//跳转到第2页
for(int i=0; irs.getPageRowsCount(); i){//循环处理
int id=rs.getInt(“ID”);
……//继续处理
rs.next();
}
总结
一个好的基础类应该是便于使用,并且具备足够的可移植性,同时要保证其功能的完善 。在上面的实现中,我们从java.sql.ResultSet接口继承出Pageable,并实现了它 。这就保证了在使用中与JDBC原有操作的一致性 , 同时对原有功能没有缩减 。
同时它也是易于使用的 , 因为封装了一切必要的操作 , 所以在你的代码中唯一显得"难看"和"不舒服"的地方就是需要自己去构造一个PageableResultSet2 。不过只要你愿意 , 这也是可以解决的 。
当然它也有具有充分的可移植性,当你将数据库由Oracle变为Mysql或者SQLServer的时候,你仍然可以使用这些分页的代码 。它在使用中(或者说在移植的过程中)唯一的限制就是你必须要使用一个支持JDBC2的驱动(现在明白为什么我把类命名为PageableResultSet2了吧 。:P),不过,好在JDBC2已经成为标准了,绝大多数的数据库(如Oracle, Mysql, SQLServer)都有自己的或者第三方提供的JDBC2的驱动 。
OK,这个分页的实现是否对你的编程有帮助呢java简单分页代码?仔细看看,其实真正自己写的代码并不多的,大部分都只是简单的转发操作 。一个合适的模式应用可以帮你很大忙 。
这里只是简单的取得一个总记录数,并将记录游标移回初始位置(before first),同时将参数中的ResultSet赋给成员变量 。
java中如何实现百度中的分页/**
* 分页代码
*
* @author Star
* @version 1.0 2008/07/08
*/
public class CutPage implements Serializable{
private static Log log = LogFactory.getLog(CutPage.class);
private int curPageNo = 0; // 当前页数,从0开始
private int size = 0; // 所有数据条数
private String url; // 页面跳转的路径
private List showList; // 当前页面需要显示的数据列表
private int pageSize = 20;// 每页显示的数据条数
private int groupSize = 1;// 多少页为一组
private String pageNavigation;// 导航条
/**
* 每次通过sql语句从数据库里面分组取出需要显示的数据
*
* @param request
*javax.servlet.http.HttpServletRequest对象
* @param sql
*String 查询数据库的sql语句
* @param pageSize
*int 每页显示的条数
* @param groupSize
*int 分成多少组
* @param url
*String 页面跳转的路径,若没有特殊的参数传递 , 可以传入null或"",
*如是在aciton里面调用,并且action是继承自DispatherAction的话最好传入完整的路径
*/
public void init(HttpServletRequest request, String sql, int pageSize,
int groupSize, int pageNo, String url) {
// 上一页、下一页跳转路径
if (url != null) {
this.url = url;
} else {
this.url = request.getRequestURL()"";
}
if (pageSize0)
this.pageSize = pageSize;// 每页多少条记录
if (groupSize0)
this.groupSize = groupSize;
// 当前第几页
if (pageNo0) {
this.curPageNo = 0;
} else {
this.curPageNo = pageNo;
}
int curGroup = this.curPageNo / this.groupSize1;
// 是否是新的一组数据,如果是则到数据库取数据
this.size = parseInt(request.getSession().getAttribute("page_all_size")
"", 0);
if (this.curPageNo % this.groupSize == 0
|| (request.getSession().getAttribute("cur_group") != nullparseInt(
""request.getSession().getAttribute("cur_group"), 1) != curGroup)
|| this.size == 0 || request.getParameter("reload") != null) {
request.getSession().setAttribute("cur_group", curGroup);
if (pageNo0
request.getSession().getAttribute("page_sql") != null) {
sql = request.getSession().getAttribute("page_sql")"";
} else {
request.getSession().setAttribute("page_sql", sql);
}
this.size = getTotalCount(sql);
List list = getPageData(sql, (this.curPageNo / this.groupSize)
* this.pageSize * this.groupSize, this.pageSize
* this.groupSize);
request.getSession().setAttribute("page_all_size", this.size);
request.getSession().setAttribute("page_cur_list", list);
this.setShowList(list);// 设置页面上的显示数据
} else {
this.setShowList((List) request.getSession().getAttribute(
"page_cur_list"));// 设置页面上的显示数据
}
}
/**
* 每次通过sql语句从数据库里面分组取出需要显示的数据
*
* @param request
*javax.servlet.http.HttpServletRequest对象
* @param sql
*String 查询数据库的sql语句
* @param pageSize
*int 每页显示的条数
* @param groupSize
*int 分成多少组
* @param url
*String 页面跳转的路径,若没有特殊的参数传递,可以传入null或"" ,
*如是在aciton里面调用,并且action是继承自DispatherAction的话最好传入完整的路径
*/
public void init(HttpServletRequest request, String sql, int pageSize,
int groupSize, String url) {
// 当前第几页
String curPage = request.getParameter("pageNo");
init(request, sql, pageSize, groupSize, parseInt(curPage, -1), url);
}
/**
* 每次通过sql语句从数据库里面分组取出需要显示的数据
*
* @param request
*javax.servlet.http.HttpServletRequest对象
* @param sql
*String 查询数据库的sql语句
* @param pageSize
*int 每页显示的条数
* @param groupSize
*int 分成多少组
* @param url
*String 页面跳转的路径,若没有特殊的参数传递,可以传入null或"",
*如是在aciton里面调用,并且action是继承自DispatherAction的话最好传入完整的路径
*/
public void init(HttpServletRequest request, String sql, int pageSize,
int groupSize, int pageNo) {
init(request, sql, pageSize, groupSize, pageNo, "");
}
太多了,贴不下,见附件
如何用java实现分页效果(eclipse工具)package dl.wsxx.base;
public class Pager {
private int totalRows; // 总行数
private int pageSize; // 每页显示的行数
private int currentPage; // 当前页号
private int totalPages; // 总页数
private int startRow; // 当前页在数据库中的起始行
private int pageStartRow; // 当前页开始行
private int pageEndRow; // 当前页结束行
private int hasNextPage; // 下一页存在标识[0:不存在 , 1:存在]
private int hasPreviousPage; // 前一页存在标识[0:不存在,1:存在]
public Pager() {
}
public Pager(int _totalRows,int _pageSize) {
pageSize = _pageSize;
totalRows = _totalRows;
totalPages = totalRows / pageSize;
int mod = totalRows % pageSize;
if (mod0) {
totalPages;
}
currentPage = 1;
startRow = 0;
}
public int getStartRow() {
return startRow;
}
public int getpageStartRow() {
return pageStartRow;
}
public int getpageEndRow() {
return pageEndRow;
}
public int getTotalPages() {
return totalPages;
}
public int getCurrentPage() {
return currentPage;
}
public int getPageSize() {
return pageSize;
}
public int getHasNextPage() {
return hasNextPage;
}
public int getHasPreviousPage() {
return hasPreviousPage;
}
public void setTotalRows(int totalRows) {
this.totalRows = totalRows;
}
public void setStartRow(int startRow) {
this.startRow = startRow;
}
public void setPageStartRow(int pageStartRow) {
this.pageStartRow = pageStartRow;
}
public void setPageEndRow(int pageEndRow) {
this.pageEndRow = pageEndRow;
}
public void setTotalPages(int totalPages) {
this.totalPages = totalPages;
}
public void setCurrentPage(int currentPage) {
this.currentPage = currentPage;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public void setHasNextPage(int hasNextPage) {
this.hasNextPage = hasNextPage;
}
public void setHasPreviousPage(int hasPreviousPage) {
this.hasPreviousPage = hasPreviousPage;
}
public int getTotalRows() {
return totalRows;
}
public void first() {
currentPage = 1;
startRow = 0;
pageStartRow = startRow1;
this.hasFlagSet(currentPage, totalPages);
if (this.hasNextPage == 0) {
pageEndRow = totalRows;
} else {
pageEndRow = startRowpageSize;
}
}
public void previous() {
if (currentPage == 1) {
return;
}
currentPage--;
startRow = (currentPage - 1) * pageSize;
pageStartRow = startRow1;
this.hasFlagSet(currentPage, totalPages);
if (this.hasNextPage == 0) {
pageEndRow = totalRows;
} else {
pageEndRow = startRowpageSize;
}
}
public void next() {
if (currentPagetotalPages) {
currentPage;
}
startRow = (currentPage - 1) * pageSize;
pageStartRow = startRow1;
this.hasFlagSet(currentPage, totalPages);
if (this.hasNextPage == 0) {
pageEndRow = totalRows;
} else {
pageEndRow = startRowpageSize;
}
}
public void last() {
currentPage = totalPages;
startRow = (currentPage - 1) * pageSize;
pageStartRow = startRow1;
this.hasFlagSet(currentPage, totalPages);
if (this.hasNextPage == 0) {
pageEndRow = totalRows;
} else {
pageEndRow = startRowpageSize;
}
}
public void refresh(int _currentPage) {
currentPage = _currentPage;
if (currentPagetotalPages) {
last();
}
this.hasFlagSet(currentPage, totalPages);
}
private void hasFlagSet(int currentPage, int totalPages) {
if (currentPage == totalPages) {
if (currentPage == 1) {
this.hasPreviousPage = 0;
this.hasNextPage = 0;
} else {
this.hasPreviousPage = 1;
this.hasNextPage = 0;
}
} else {
if (currentPage == 1) {
this.hasPreviousPage = 0;
this.hasNextPage = 1;
} else {
this.hasPreviousPage = 1;
this.hasNextPage = 1;
}
}
}
}
这是我的工程里的分页核心代码 , 希望对你有用,还有ssh分页文档,可以参照研究一下 。
求java分页代码,急用!package common.util;
import java.util.*;
public class PageController implements IPageModel {
private Collection model;
//数据总行数
private int totalRowCount = 0; //
//总页数
private int pageCount = 0;
//每页应显示java简单分页代码的行数
private int maxPageRowCount = 0;
//当前页行数
private int currPageRowCount = 0;
//当前页号
private int currPageNum;
//默认构造
public PageController() {
super();
}
//传入模型
public PageController(Collection model) {
setPageController(model);
}
//设一个分页模型
public void setPageController(Collection model) {
this.model = model;
this.totalRowCount = model.size();
}
/**
* 总页数
* @return int
*/
public int getPageCount() {
return this.pageCount;
}
/**
* getPageContents
*
* @param intPageNum int
* @return Object
*/
public Object getPageContents(int intPageNum) {
//非法数据
if(intPageNum1){
intPageNum=1;
}
if(intPageNumpageCount){
intPageNum=pageCount;
}
//指定当前页
this.currPageNum=intPageNum;
int i = 0;
ArrayList arr = new ArrayList();
//如果是合法java简单分页代码的范围
if (intPageNum0intPageNum = pageCount) {
//计算该页java简单分页代码的开始号和结束号
int lfromrow = (intPageNum - 1) * maxPageRowCount;
arr = (ArrayList) getElementsAt(model, lfromrow, lfromrowmaxPageRowCount-1);
}
currPageNum=intPageNum;
return arr;
}
public Object getLastPage() {
return this.getPageContents(pageCount);
}
public Object getFirstPage() {
return this.getPageContents(0);
}
/**
* getCurrentPageRowsCount
*
* @return int
*/
public int getCurrentPageRowsCount() {
if(currPageNumpageCount){
return maxPageRowCount;
}
else{//最后一页
return totalRowCount-(pageCount-1)*maxPageRowCount;
}
}
public int getCurrentPageNum(){
return currPageNum;
}
/**
* setMaxPageRows
*
* @return int
*/
public void setMaxPageRows(int rowCount) {
maxPageRowCount = rowCount;
//计算总页数
if (totalRowCount % maxPageRowCount0) { //有余数
pageCount = totalRowCount / maxPageRowCount1;
}
else {
pageCount = totalRowCount / maxPageRowCount;
}
}
/**
* getMaxPageRows
*/
public int getMaxPageRows() {
return maxPageRowCount;
}
//私有方法java简单分页代码,返回集合中指定范围java简单分页代码的数据
private Object getElementsAt(Collection model, int fromIndex, int toIndex) {
Iterator iter = model.iterator();
ArrayList arr = new ArrayList();
if (iter != null) {
int i = 0;
while (iter.hasNext()) {
Object obj=iter.next();
if (i = fromIndexi = toIndex) {
arr.add(obj);
}
if (itoIndex) {
break;
}
i = i1;
}
}
return arr;
}
}
怎样用java实现分页显示实现原理很简单,就是建立一个Page类,里面放当前访问的页数和每一页显示的记录行数 。然后通过分页计算就可以得出下列数据 。
总页数 = 总记录数/每页大小,如果0!=总记录数%每页大小,那么总页数再 1 。
当前页数 。
表记录的起始位置=(当前页数-1)*每页大小 。
总记录数(select count(*) from [表名] [where [条件]] 。从数据库中查询得到)
每页大?。梢怨潭ǎ部梢源右趁娲从辛苏饧父霾问螅陀胹ql语句查出对应的记录就可以了 。
Java是一种可以撰写跨平台应用程序的面向对象的程序设计语言 。
Java 技术具有卓越的通用性、高效性、平台移植性和安全性 , 广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群 。
它最初被命名为Oak,目标设定在家用电器等小型系统的编程语言,来解决诸如电视机、电话、闹钟、烤面包机等家用电器的控制和通讯问题 。
由于这些智能化家电的市场需求没有预期的高,Sun放弃了该项计划 。就在Oak几近失败之时 , 随着互联网的发展 , Sun看到了Oak在计算机网络上的广阔应用前景,于是改造了Oak,以“Java”的名称正式发布 。
Java的主要工作是通过编程语言来制作互联网页面、制作动态效果以及网站等技术 。
谁能给我个完整的java 分页代码 谢谢了import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Enumeration;
import javax.servlet.http.HttpServletRequest;
import com.lqh.dao.db.DBCon;
public class PageDAO {
public static final String Text = "text";
public static final String Image = "image";
public static final String BbsText = "bbstext";
public static final String BbsImage = "bbsimage";
private HttpServletRequest request;
private int currentpage = 1; // 当前是第几页
private int pagecount = 0; // 一共有多少页
private int rscount = 0; // 一共有多少行
private int pagesize = 10; // 每页有多少行[默认为20行]
public PageDAO(HttpServletRequest request) {
this.request = request;
}
public int getCurrentpage() {
return currentpage;
}
public void setCurrentpage(int currentpage) {
this.currentpage = currentpage;
}
public int getPagecount() {
return pagecount;
}
public void setPagecount(int pagecount) {
this.pagecount = pagecount;
}
public int getPagesize() {
return pagesize;
}
public void setPagesize(int pagesize) {
this.pagesize = pagesize;
}
public int getRscount() {
return rscount;
}
public void setRscount(int rscount) {
this.rscount = rscount;
}
/**
* 传入SQL语句获取总记录数
*/
public int getRsCountForRs(String sql) {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
DBCon dbcon=new DBCon();
try {
conn = dbcon.getConn();
ps = conn.prepareStatement(sql);
rs = ps.executeQuery();
if (rs.next()) {
rs.last();
this.rscount = rs.getRow();
} else {
this.rscount = 0;
}
} catch (Exception ex) {
ex.printStackTrace();
this.rscount = 0;
} finally {
dbcon.tryClose(rs, ps, conn);
}
return this.rscount;
}
public int getRsCountForSQL(String sql) {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
DBCon dbcon=new DBCon();
try {
conn = dbcon.getConn();
ps = conn.prepareStatement(sql);
rs = ps.executeQuery();
if (rs.next()) {
this.rscount = rs.getInt("rscount");
} else {
this.rscount = 0;
}
} catch (Exception ex) {
ex.printStackTrace();
this.rscount = 0;
} finally {
dbcon.tryClose(rs, ps, conn);
}
return this.rscount;
}
/**
* 获取总页数
*
* @return int
*/
public int getPageCount() {
try {
this.pagecount = ((this.rscount - 1) / this.pagesize)1;
} catch (Exception ex) {
this.pagecount = 0;
}
return this.pagecount;
}
/**
* 获取当前页码java简单分页代码的设置
*
* @return int
*/
public int getCurrentPage() {
try {
if (this.request.getParameter("currentpage") != null
Integer.parseInt(this.request
.getParameter("currentpage"))1) {
this.currentpage = Integer.parseInt(this.request
.getParameter("currentpage"));
} else {
this.currentpage = 1;
}
} catch (Exception ex) {
this.currentpage = 1;
}
return this.currentpage;
}
/**
* 分页工具条
*
* @param fileName
*String
* @return String
*/
public String pagetool(String flag) {
StringBuffer str = new StringBuffer();
String url = this.getParamUrl();
int ProPage = this.currentpage - 1;
int Nextpage = this.currentpage1;
// 文字java简单分页代码的分页
if (flag.equals(PageDAO.Text)) {
str.append("form method='post' name='pageform' action=''");
str
.append("table style='color: windowframe' width='100%' border='0' cellspacing='0' cellpadding='0'");
str.append("tr");
str.append("td width='20%'/td");
str.append("td height='26'");
str.append("共有记录"this.rscount"条 ");
str.append("共"this.pagecount"页 ");
str.append("每页"this.pagesize"记录 ");
str.append("现在"this.currentpage"/"this.pagecount"页");
str.append("/tdtd");
【java简单分页代码 java分页怎么实现】if (this.currentpage1) {
str.append("a href='"url"currentpage=1'首页/a");
str.append(" ");
str.append("a href='"url"currentpage="ProPage
"'上一页/a");
str.append(" ");
} else {
str.append("首页");
str.append(" ");
str.append("上一页");
str.append(" ");
}
if (this.currentpagethis.pagecount) {
str.append("a href='"url"currentpage="Nextpage
"'下一页/a");
str.append(" ");
} else {
str.append("下一页");
str.append(" ");
}
if (this.pagecount1this.currentpage != this.pagecount) {
str.append("a href='"url"currentpage="pagecount
"'尾页/a");
str.append(" ");
} else {
str.append("尾页");
str.append(" ");
}
str.append("转到");
str
.append("select name='currentpage' onchange='javascript:ChangePage(this.value);'");
for (int j = 1; j = pagecount; j) {
str.append("option value='"j"'");
if (currentpage == j) {
str.append("selected");
}
str.append("");
str.append(""j"");
str.append("/option");
}
str.append("/select页");
str.append("/tdtd width='3%' /td/tr/table");
str.append("script language='javascript'");
str.append("function ChangePage(testpage){");
str.append("document.pageform.action='"url
"currentpage=' testpage '';");
str.append("document.pageform.submit();");
str.append("}");
str.append("/script");
str.append("/form");
} else if (flag.equals(PageDAO.Image)) {
/**
* 图片java简单分页代码的分页
*/
} else if (flag.equals(PageDAO.BbsText)) {
/**
* 论坛形式java简单分页代码的分页[直接以数字方式体现]
*/
str
.append("table width='100%' border='0' cellspacing='0' cellpadding='0'");
str.append("tr");
str.append("td width='3%' /td");
str.append("td height='26'");
str.append("记录"this.rscount"条");
str.append("共"this.pagecount"页");
str.append("每页"this.pagesize"记录");
str.append("现在"this.currentpage"/"this.pagecount"页");
str.append("/tdtd");
// 设定是否有首页java简单分页代码的链接
if (this.currentpage1) {
str.append("a href='"url"currentpage=1'首页/a");
str.append("");
}
// 设定是否有上一页的链接
if (this.currentpage1) {
str.append("a href='"url"currentpage="ProPage
"'上一页/a");
str.append("");
}
// 如果总页数只有10的话
if (this.pagecount = 10) {
for (int i = 1; i = this.pagecount; i) {
if (this.currentpage == i) {
str.append("font color=red["i
"]/font");
} else {
str.append("a href='"url"currentpage="i
"'"i"/a");
}
}
} else {
// 说明总数有超过10页
// 制定特环的开始页和结束页
int endPage = this.currentpage4;
if (endPagethis.pagecount) {
endPage = this.pagecount;
}
int startPage = 0;
if (this.pagecount = 8this.currentpage = 8) {
startPage = this.currentpage - 5;
} else {
// 表示从第一页开始算
startPage = 1;
}
System.out.println(startPage);
System.out.println(endPage);
for (int i = startPage; i = endPage; i) {
if (this.currentpage == i) {
str.append("font color=red["i
"]/font");
} else {
str.append("a href='"url"currentpage="i
"'"i"/a");
}
}
}
// 设定是否有下一页的链接
if (this.currentpagethis.pagecount) {
str.append("a href='"url"currentpage="Nextpage
"'下一页/a");
str.append("");
}
// 设定是否有尾页的链接
if (this.pagecount1this.currentpage != this.pagecount) {
str.append("a href='"url"currentpage="pagecount
"'尾页/a");
str.append("");
}
str.append("/tdtd width='3%' /td/tr/table");
} else if (flag.equals(PageDAO.BbsImage)) {
/**
* 论坛形式的分页[以图片的方式体现]
*/
// 设定分页显示的CSS
str.append("style");
str
.append("BODY {FONT-SIZE: 12px;FONT-FAMILY:宋体;WIDTH: 60%; PADDING-LEFT: 25px;}");
str
.append("DIV.meneame {PADDING-RIGHT: 3px; PADDING-LEFT: 3px; FONT-SIZE: 80%; PADDING-BOTTOM: 3px; MARGIN: 3px; COLOR: #ff6500; PADDING-TOP: 3px; TEXT-ALIGN: center}");
str
.append("DIV.meneame A {BORDER-RIGHT: #ff9600 1px solid; PADDING-RIGHT: 7px; BACKGROUND-POSITION: 50% bottom; BORDER-TOP: #ff9600 1px solid; PADDING-LEFT: 7px; BACKGROUND-IMAGE: url('"
this.request.getContextPath()
"/meneame.jpg'); PADDING-BOTTOM: 5px; BORDER-LEFT: #ff9600 1px solid; COLOR: #ff6500; MARGIN-RIGHT: 3px; PADDING-TOP: 5px; BORDER-BOTTOM: #ff9600 1px solid; TEXT-DECORATION: none}");
str
.append("DIV.meneame A:hover {BORDER-RIGHT: #ff9600 1px solid; BORDER-TOP: #ff9600 1px solid; BACKGROUND-IMAGE: none; BORDER-LEFT: #ff9600 1px solid; COLOR: #ff6500; BORDER-BOTTOM: #ff9600 1px solid; BACKGROUND-COLOR: #ffc794}");
str
.append("DIV.meneame SPAN.current {BORDER-RIGHT: #ff6500 1px solid; PADDING-RIGHT: 7px; BORDER-TOP: #ff6500 1px solid; PADDING-LEFT: 7px; FONT-WEIGHT: bold; PADDING-BOTTOM: 5px; BORDER-LEFT: #ff6500 1px solid; COLOR: #ff6500; MARGIN-RIGHT: 3px; PADDING-TOP: 5px; BORDER-BOTTOM: #ff6500 1px solid; BACKGROUND-COLOR: #ffbe94}");
str
.append("DIV.meneame SPAN.disabled {BORDER-RIGHT: #ffe3c6 1px solid; PADDING-RIGHT: 7px; BORDER-TOP: #ffe3c6 1px solid; PADDING-LEFT: 7px; PADDING-BOTTOM: 5px; BORDER-LEFT: #ffe3c6 1px solid; COLOR: #ffe3c6; MARGIN-RIGHT: 3px; PADDING-TOP: 5px; BORDER-BOTTOM: #ffe3c6 1px solid}");
str.append("/style");
str.append("div class=\"meneame\"");
// 判定是否有上一页
if (this.currentpage1) {
str.append("a href='"url
"currentpage=1' hidefocus=\"true\"首页/a");
str.append("");
str.append("a href='"url"currentpage="ProPage
"' hidefocus=\"true\"上一页/a");
str.append("");
} else {
str.append("span class=\"disabled\"首页/span");
str.append("");
str.append("span class=\"disabled\"上一页/span");
str.append("");
}
// 显示中间的图片
if (this.pagecount = 10) {
for (int i = 1; i = this.pagecount; i) {
if (this.currentpage == i) {
str.append("span class=\"current\""i"/span");
} else {
str.append("a href='"url"currentpage="i
"' hidefocus=\"true\""i
"/a");
}
}
} else {
// 说明总数有超过10页
// 制定特环的开始页和结束页
int endPage = this.currentpage4;
if (endPagethis.pagecount) {
endPage = this.pagecount;
}
int startPage = 0;
if (this.pagecount = 8this.currentpage = 8) {
startPage = this.currentpage - 5;
} else {
// 表示从第一页开始算
startPage = 1;
}
System.out.println(startPage);
System.out.println(endPage);
for (int i = startPage; i = endPage; i) {
if (this.currentpage == i) {
str.append("span class=\"current\""i"/span");
} else {
str.append("a href='"url"currentpage="i
"' hidefocus=\"true\""i
"/a");
}
}
}
// 判断下一页和尾页
if (this.currentpagethis.pagecount) {
if (this.currentpagethis.pagecount - 10) {
str.append("...");
str.append("a href='"url"currentpage="
(this.pagecount - 1)"' hidefocus=\"true\""
(this.pagecount - 1)"/a");
str.append("a href='"url"currentpage="
this.pagecount"' hidefocus=\"true\""
this.pagecount"/a");
}
str.append("a href='"url"currentpage="Nextpage
"' hidefocus=\"true\"下一页/a");
str.append("");
} else {
str.append("span class=\"disabled\"下一页/span");
str.append("");
}
if (this.pagecount1this.currentpage != this.pagecount) {
str.append("a href='"url"currentpage="pagecount
"' hidefocus=\"true\"尾页/a");
str.append("");
} else {
str.append("span class=\"disabled\"尾页/span");
str.append("");
}
str.append("/div");
}
return str.toString();
}
public String getParamUrl() {
String url = "";
url = this.request.getRequestURI().toString();
if (url.indexOf("?") == -1) {
url = url"?";
}
String totalParams = "";
Enumeration params = this.request.getParameterNames();// 得到所有参数名
while (params.hasMoreElements()) {
String tempName = params.nextElement().toString();
String tempValue = https://www.04ip.com/post/this.request.getParameter(tempName);
if (tempValue != null!tempValue.equals("")
!tempName.equals("currentpage")) {
if (totalParams.equals("")) {
totalParams = totalParamstempName"="tempValue;
} else {
totalParams = totalParams""tempName"="
tempValue;
}
}
}
String totalUrl = urltotalParams;
return totalUrl;
}
}
关于java简单分页代码和java分页怎么实现的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。
推荐阅读
- b站要签我去直播,b站签约主播要求
- linux命令中有问号,linux 问号和星号
- chatgpt怎么用于聊天,chat怎么样
- sap系统涵盖的业务包括,sap包含哪些模块
- vb.net双引号转义 vbs转义字符双引号
- 女儿生气会有什么危害视频,女儿生气会有什么危害视频讲解
- 养成类即时策略游戏推荐,养成类策略类手游
- 广州多平台小程序代理,广州小程序商城
- vb.net参数窗口 vbnet showdialog