关于网友提出的“ 从数据库中获取数据如何分页显示”问题疑问,本网通过在网上对“ 从数据库中获取数据如何分页显示”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: 从数据库中获取数据如何分页显示
描述: 如题,在JSP中,如何分页呈现数据库中获得的数据,另外,在第一行,可以点击某一列的列名,然后按照该列属性进行排序,这个应该怎么实现?
解决方案1: 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;
}
}
分页
总共${totalPageCount }页
| 当前第${ currentPage}页 |
1}">
上一页
上一页
|
下一页
|
= totalPageCount}">
下一页
|
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");
解决方案2: 我是通过另写一个page类来实现的,可参考如下代码:
package object;
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");
%>
解决方案3: 对于不同的数据库实现分页主要是应用各数据库中提供可用于分页的函数:
在Oracle中可以用rownum函数或dense_rank() over()函数实现,rownum应用较多
中SQLServer中可以用top()函数也可以用dense_rank() over()实现前者使用较多
中MySQL中可以用limit()函数实现。
至于按照该列属性进行排序,可以使用ExtJs(一个Ajax的框架)在设计页面时实现.
解决方案4:http://www.family168.com/tutorial/jsp/html/jsp-ch-15.html
- 明星图片
- 相关文章
-