(JAVA)从数据库查出所有数据再分页的方法

根据用户名,在数据库查出了用户,懒加载出了该用户发的所有贴,请问有什么办法给这些贴分页?

给你一个非缓存分页类的简单例子吧(Page类可以视作javabean):
/**
* @author Administrator
*
*
* TODO 要更改此生成的类型注释的模板,请转至
* 窗口 - 首选项 - Java - 代码样式 - 代码模板
*/

import java.util.*;
public class Pager {

private String PageUrl;
private boolean hasNext;
private boolean hasPrevious;
private String previousPage;
private String nextPage;
private int offset;
private int size;
private int length;
private int pagenumber;

public Pager(int offset,int length, int size, String url){
this.offset=offset;
this.length=length;
this.size=size;
int index=url.indexOf("&pager.offset");
if (index>-1){
this.PageUrl=url.substring(0,index);
}else{
this.PageUrl=url;
}
}
public void setoffset(int offset){
this.offset=offset;
}
public void setPagerUrl(String PagerUrl){
this.PageUrl=PagerUrl;
}
public void setsize(int size){
this.size=size;
}
public void setlength(int length){
this.length=length;
}
public int getoffset(){
return this.offset;
}
public String getPageUrl(){
return this.PageUrl;
}
public boolean gethasNext(){
if((offset+1)*length>=size){
hasNext=false;
}else{
hasNext=true;
}
return hasNext;
}
public boolean gethasPrevious(){
if(offset>=1){
this.hasPrevious=true;
}else{
this.hasPrevious=false;
}
return hasPrevious;
}
public String getpreviousPage(){
this.previousPage="";
if (this.gethasPrevious()){
this.previousPage=this.PageUrl+"&pager.offset="+(offset-1);
}
return previousPage;
}
public String getnextPage(){
this.nextPage="";
if(this.gethasNext()){
this.nextPage=this.PageUrl+"&pager.offset="+(offset+1);
}
return this.nextPage;
}
public int getpagenumber(){
float temppn=(float)size/(float)length;
pagenumber=new Float(temppn).intValue();
if (temppn>pagenumber){
this.pagenumber++;
}
return this.pagenumber;
}
public static ArrayList FindPageList(int offset,int length,List list){
ArrayList alist=new ArrayList();
for(int i=offset*length; i<(offset*length+length)&&i<list.size();i++){
alist.add(list.get(i));
}
return alist;
}

}
具体使用:
1、在servlet初始化这个page
List list=DataUtil.getSpecifiedList();//得到整个数据列表

int offset=0;//便宜量
int length=10;//每页数据记录数
String pageOffset=request.getParameter("pager.offset");
if(pageOffset==null||pageOffset.equals("")){
offset=0;
}else{
offset=Integer.parseInt(pageOffset);
}

String Url=request.getRequestURL().toString()+"?"+request.getQueryString();
Pager pager=new Pager(offset,length,list.size(),Url);
List RsList=Pager.FindPageList(offset,length,list);

request.setAttribute("Pager",pager);
request.setAttribute("List",RsList);

RequestDispatcher dispatcher= request.getRequestDispatcher("/UI/someModule/list_display.jsp");
dispatcher.forward(request,response);

2、具体jsp中得到分页结果,并显示,并附页面跳转部分:
页面中得到分页结果
<%
List RpList=(List)request.getAttribute("List");
Pager pager=(Pager)request.getAttribute("Pager");
%>
<%--用for循环把RpList显示--%>
<!--页面跳转代码,这只是个形式,简化和改变方式的余地很大-->
<form name="pageForm"><%if(pager.gethasPrevious()){%><a href="<%= pager.getpreviousPage()%>">prev</a>
<%}%>
<%if( pager.gethasNext()){%><a href="<%=pager.getnextPage()%>">next</a><%}%><%if(pager.getpagenumber()>1) {%>第<select name="pager" onchange="window.location='<%=pager.getPageUrl()%>&pager.offset='+document.pageForm.pager.selectedIndex;"><%for(int i=0;i<pager.getpagenumber();i++){%><option value=<%=i%> <%if(pager.getoffset()==i){ %>selected<%}%>><%=(i+1)%></option><%}%></select>页<%}%> 共<%=pager.getpagenumber()%>页</form>
ps:1、2两部分可以都放在页面类,不过你好像要MVC,所以给你这个代码。
是否可以解决您的问题?
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-09-19
将数据放在List中, 然后使用 xxxList.subList(起始位置,终止位置)就可以取到一个子列,这句就是一页。
第2个回答  2014-09-19
一条sql 语句搞定数据库分页
select top 10 b.* from (select top 20 主键字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主键字段 = a.主键字段 order by a.排序字段
第3个回答  2014-09-19
hibernate 有自带的分页方法,你给他传一个(pageNow:当前页,pageSize:每页显示多少条),传好之后hibernate就能自动帮你实现分页了。

return this.getHibernateTemplate()
.getSessionFactory()
.getCurrentSession()
.createQuery(hql.toString())
.setFirstResult((pageNow-1)*pageSize)
.setMaxResults(pageSize)
.list();本回答被提问者和网友采纳
第4个回答  2014-09-19
要看用的是什么数据库 不同数据库有不同的方法
相似回答