最近在做毕业设计,界面要用到分页技术,于是就将自己所整理的以及思考的结果整理出来给大家分享,希望对你们有所帮助。
首先分页要用到4个属性
pageNow:当前页
pageSize:每页条数
pageCount:总页数
rowCount:总条数
其中rowCount可以通过查询获得,而pageCount可以通过计算获得。
不过这段代码完全可以简化位一句:if(rowCount%pageSize==0){ pageCount=rowCount/pageSize; }else{ pageCount=rowCount/pageSize+1;
pageCount=(rowCount+pageSize-1)/pageSize;//计算总页数
下面给出详细的算法和分析:
public ArrayList<UserBean> getUsersByPage(String sql,int pageSize,int pageNow){
ArrayList<UserBean> al=new ArrayList<UserBean>();
try {
Connection conn=this.getConn();
System.out.println(conn);
ps=conn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
rs=ps.executeQuery();
rs.last();//光标指向查询结果集中的最后一条记录
int rowCount=rs.getRow();//获取记录总数
int pageCount=(rowCount+pageSize-1)/pageSize;//计算总页数
if(pageNow>pageCount) pageNow=pageCount;
if(pageNow<1) pageNow=1;
if(pageCount>0){
/*将记录定位到待显示页的第一条记录上,absolute(int row)函数
* 表示将记录移动指定的row行中*/
rs.absolute((pageNow-1)*pageSize+1);
int i=0;//设置计数器
//i小于pageSize并且光标还没移动到最后一行记录的后面
while(i<pageSize&&!rs.isAfterLast()){
UserBean ub=new UserBean();
ub.setUserid(rs.getInt(1));
ub.setUsername(rs.getString(2));
ub.setTruename(rs.getString(3));
ub.setEmail(rs.getString(4));
ub.setPhone(rs.getString(5));
ub.setAdress(rs.getString(6));
ub.setPostcode(rs.getString(7));
ub.setGrade(rs.getInt(8));
rs.next();
i++;
al.add(ub);
}
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally{
this.close();
}
return al;
}
其中ps=conn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)中必须用到可滚动的结果集TYPE_SCROLL_INSENSITIVE,表示rs指针可再结果集上前后滚动移动,rs.last()就表示了这个用法。
而getConn()为数据库连接函数,close()为关闭资源函数,还有一个UserBean的get和set函数,这些应该是不难的。
有不理解或是不足的地方欢迎提出!