Query querypage=session.createQuery("from User");//所有的数据 querypage.setFirstResult((currentPage - 1) * pageSize);//设置从第几开始的查询 querypage.setMaxResults(pageSize);//设置页面最大的相识结果 List list=querypage.list();//获取总条数数的方法 public int getUserTotalPages(){ CreateDB db=new CreateDB(); Session session=db.getSessions(); session.beginTransaction(); Query query=session.createQuery("from User"); int TotalPage=query.list().size(); return TotalPage; }
//设置总页数的方法 public int getPageCount(int pageSize){ DataControl dbcon=new DataControl(); int totalcountNum=dbcon.getUserTotalPages(); int totalPageCount=((totalcountNum+pageSize)-1)/pageSize; return totalPageCount; }
//查询的方法 /* * */ public List selectUserinfo(int currentPage, int pageSize ){ try { if (currentPage == 0) { currentPage = 1; } CreateDB db=new CreateDB(); Session session=db.getSessions(); session.beginTransaction(); Query querypage=session.createQuery("from User"); querypage.setFirstResult((currentPage - 1) * pageSize); querypage.setMaxResults(pageSize); List list=querypage.list(); return list ; } catch (RuntimeException re) { throw re; }
在Oracle中可以用rownum函数或dense_rank() over()函数实现,rownum应用较多
中SQLServer中可以用top()函数也可以用dense_rank() over()实现前者使用较多
中MySQL中可以用limit()函数实现。
至于按照该列属性进行排序,可以使用ExtJs(一个Ajax的框架)在设计页面时实现.
public class Page {
private int pageSize;//每页显示的条数
private int recordCount;//总共的条数
private int currentPage;//当前页面
public Page(int pageSize, int recordCount, int currentPage) {
this.pageSize = pageSize;
this.recordCount = recordCount;
setCurrentPage(currentPage);
}
//构造方法
public Page(int pageSize, int recordCount) {
this(pageSize, recordCount, 1);
}
//总页数
public int getPageCount() {
int size = recordCount/pageSize;//总条数/每页显示的条数=总页数
int mod = recordCount % pageSize;//最后一页的条数
if(mod != 0)
size++;
return recordCount == 0 ? 1 : size;
}
//包含,起始索引为0
public int getFromIndex() {
return (currentPage-1) * pageSize;
}
//未到末页时,下一个索引项肯定是currentPage*pageSize,在末页时,currentPage*pageSize大于或等于recordCount
public int getToIndex() {
return Math.min(recordCount, currentPage * pageSize);
}
//得到当前页
public int getCurrentPage(){
return currentPage;
}//设置当前页
public void setCurrentPage(int currentPage) {
int validPage = currentPage <= 0 ? 1 : currentPage;
validPage = validPage > getPageCount() ? getPageCount() : validPage;
this.currentPage = validPage;
}//得到每页显示的条数
public int getPageSize() {
return pageSize;
}//设置每页显示的条数
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}//得到总共的条数
public int getRecordCount() {
return recordCount;
}//设置总共的条数
public void setRecordCount(int recordCount) {
this.recordCount = recordCount;
}
}
JSP的实现翻页的部分代码:<%
String sql = "select CName,TName,time,admitNum,CId,leftNum from course,teacher where CTId = TId";
ResultSet rs = courseInfo.executeQuery(sql);
rs.last();
int recordSize = rs.getRow(); //算总记录数
String pageStr = request.getParameter("page"); //获得分页数
int currentPage = 1;//当前页默认从1开始
if (pageStr != null)
currentPage = Integer.parseInt(pageStr);
Page p = new Page(10, recordSize, currentPage);//构建每页显示10条记录的页对象
currentPage = p.getCurrentPage();//获得当前页码
if (recordSize > 0) //这句话非常重要,如果不用指针标志数据库当前所在地,则点击“下一页”时,则指针重置,无法继续读取数据
rs.absolute((currentPage - 1) * 10 + 1);
//循环显示10条记录
for (int i = p.getFromIndex(); i < p.getToIndex(); i++) {
String CId = rs.getString("CId");
String CName = rs.getString("CName");
int admitNum = rs.getInt("leftNum");
%>
,不过这个事页面刷新型的
querypage.setFirstResult((currentPage - 1) * pageSize);//设置从第几开始的查询
querypage.setMaxResults(pageSize);//设置页面最大的相识结果
List list=querypage.list();//获取总条数数的方法
public int getUserTotalPages(){
CreateDB db=new CreateDB();
Session session=db.getSessions();
session.beginTransaction();
Query query=session.createQuery("from User");
int TotalPage=query.list().size();
return TotalPage;
}
//设置总页数的方法
public int getPageCount(int pageSize){
DataControl dbcon=new DataControl();
int totalcountNum=dbcon.getUserTotalPages();
int totalPageCount=((totalcountNum+pageSize)-1)/pageSize;
return totalPageCount;
}
//查询的方法
/*
*
*/
public List selectUserinfo(int currentPage, int pageSize ){
try {
if (currentPage == 0) {
currentPage = 1;
}
CreateDB db=new CreateDB();
Session session=db.getSessions();
session.beginTransaction();
Query querypage=session.createQuery("from User");
querypage.setFirstResult((currentPage - 1) * pageSize);
querypage.setMaxResults(pageSize);
List list=querypage.list();
return list ;
} catch (RuntimeException re) {
throw re;
}
}
分页
<!-- 分页 -->
<div>
<table width="400" border="1">
<tr>
<td >总共${totalPageCount }页</td>
<td>当前第${ currentPage}页</td>
<td>
<c:if test="${currentPage > 1}">
<a href="partpages.do?page=${currentPage-1}">上一页</a>
</c:if>
<c:if test="${currentPage <= 1}">
上一页
</c:if>
</td>
<td>
<c:if test="${currentPage < totalPageCount}">
<a href="partpages.do?page=${currentPage+1}">下一页</a>
</c:if>
</td>
<td> <c:if test="${currentPage >= totalPageCount}">
下一页
</c:if></td>
String pageString=request.getParameter("page");
if(pageString == null || pageString.length() == 0) {
pageString = "1";
}
int currentPage= 0 ;
try {
currentPage = Integer.parseInt(pageString);
} catch(Exception e) {} if(currentPage == 0) {
currentPage = 1;
} int pageSize = 5;//每页显示的条数
DataControl dataCon=new DataControl();
List Userinfolist=dataCon.selectUserinfo(currentPage, pageSize);
request.setAttribute("Userinfolist",Userinfolist);
//总条数
request.setAttribute("TotalPage",dataCon.getUserTotalPages());
//总页数
request.setAttribute("totalPageCount",dataCon.getPageCount(pageSize));
//
request.setAttribute("currentPage", currentPage);
return new ActionForward("/showListPage.jsp");