您的位置:首页 > 其它

开发手记---分页查询

2007-10-07 13:59 141 查看
分页查询

JAVA开发中的一个重难题

说明:

我做的这个分页类,实现了每次查询取出一页的数据,解决了数据库性能问题.

添加的连接池的支持,解决了连接耗时问题.

过程:

首先初始化一个Page类,其中三个参数

分别为:要执行的SQL,操作的表,及每页记录数

初始得到总记录,页.

用getPage调用PageSet得到单页,返回ResultSet

package shop.Page;

/**

数据查询分页类

*/

import java.sql.*;

import shop.DbPool.*;//自定义的连接池类

public class Page {

private int pageCount=0;//总页数

private int pageNo=1;//当前页

private int pageSize=10;//每页记录数

private int rowCount=0;//总记录数

private String sql="";//查询语句

private ResultSet rs;

private Connection con;

Pool pool;

ExceuteQuery ex; //自定义CONNECTION查询类,用于查询返回

PageSet pageset=new PageSet();//子页集

Statement stmt;

public Page(String sql,String table,int pageS) {

//初始化查询

pageSize=pageS;

this.sql=sql;

//////////////////查询总记录数//////////////

//从连接池取得连接

pool = Pool.getInstance();

con = pool.getConnection();

ex = new ExceuteQuery(con);

//查询

try{

rs=ex.execute("select count(*) from "+table);

if (rs.next())

rowCount = rs.getInt(1);//取得总记录数

}

catch(Exception e)

{

System.out.println("查询总记录数出错,位置:Page.Page");

}

pageCount=rowCount/pageSize+1;//计算总页数

pool.freeConnection(con);

}

//取得一页

public ResultSet getPage()

{

ResultSet rss=null;

rss=pageset.getPage(sql,(pageNo-1)*pageSize,pageSize);

return rss;

}

//取得指定的一页

public ResultSet getPage(int pagenum)

{

ResultSet rss=null;

if(pagenum>=1&&pagenum<=pageCount)//指定页数在总页数范围内

{

rss=pageset.getPage(sql,(pagenum-1)*pageSize,pageSize);

pageNo=pagenum;

}

return rss;

}

//取得前一页

public ResultSet getPrePage()

{

ResultSet rss=null;

if(pageNo>1)

{

pageNo--;

rss = pageset.getPage(sql, (pageNo - 2) * pageSize, pageSize);

}

return rss;

}

//取得后一页

public ResultSet getNextPage()

{

ResultSet rss=null;

if(pageNo<pageCount)

{

pageNo++;

rss = pageset.getPage(sql, pageNo * pageSize, pageSize);

}

return rss;

}

//首页

public ResultSet firstPage()

{

ResultSet rss=null;

rss=pageset.getPage(sql,0,pageSize);

return rss;

}

//尾页

public ResultSet lastPage()

{

ResultSet rss=null;

rss=pageset.getPage(sql,(pageCount-1)*pageSize,pageSize);

return rss;

}

//获得总页数

public int getPageCount()

{

return pageCount;

}

//获得总记录数

public int getRowCount()

{

return rowCount;

}

//获得页面记录数

public int getPageSize()

{

return pageSize;

}

//获得当前页号

public int getPageNo()

{

return pageNo;

}

//是否有后页

public boolean next()

{

if(pageNo<pageCount)

{

pageNo++;

return true;

}

else return false;

}

//是否有前页

public boolean pre()

{

if(pageNo>1)

return true;

else return false;

}

}

package shop.Page;

/**

分页查询,单页查询

提取单页数据供Page调用

MySql中使用limit 记录条数 offset 起始记录 来得到一页数据

*/

import java.sql.*;

import shop.DbPool.*; //自定义的连接池类

public class PageSet {

private ResultSet rs;

private Connection con;

Pool pool;

ExceuteQuery ex; //自定义CONNECTION查询类,用于查询返回

public PageSet() {

}

//返回一页

public ResultSet getPage(String sql, int start, int size) {

//从连接池取得连接

pool = Pool.getInstance();

con = pool.getConnection();

ex = new ExceuteQuery(con);

//构造查询语句

String st = null;

String si = null;

st = st.valueOf(start);

si = si.valueOf(size);

String sqll = " limit " + si + " offset " + st; //此句用于在MYSQL中查询特定大小的一页

//查询

rs = ex.execute(sql + sqll);

pool.freeConnection(con);

return rs;

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐