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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(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,所以给你这个代码。
是否可以解决您的问题?
参考技术A 将数据放在List中, 然后使用 xxxList.subList(起始位置,终止位置)就可以取到一个子列,这句就是一页。 参考技术B 一条sql 语句搞定数据库分页
select top 10 b.* from (select top 20 主键字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主键字段 = a.主键字段 order by a.排序字段
参考技术C hibernate 有自带的分页方法,你给他传一个(pageNow:当前页,pageSize:每页显示多少条),传好之后hibernate就能自动帮你实现分页了。

return this.getHibernateTemplate()
.getSessionFactory()
.getCurrentSession()
.createQuery(hql.toString())
.setFirstResult((pageNow-1)*pageSize)
.setMaxResults(pageSize)
.list();本回答被提问者和网友采纳
参考技术D 要看用的是什么数据库 不同数据库有不同的方法

java分页

用top top 吧
我只举例了:以sqlServer吧
select top A * from student where id not in (select top A*(B-1) id from student);
A是每页的数目,B是页码
这句sql语句的子查询意思就是:查询前A*(B-1)条数据的id
而整个sql语句查询的是id不再这个子查询范围内的前A条数据

也就是说,第一页 每页10条数据,
子查询查出 10*(1-1) = 0条数据,也就是第一页应该是整个表中的最前面10条数据
而第二页就是 10*(2-1) = 10 ,也就是这一次查询出前10条数据时过滤掉第一页的数据的

其实如果用了hibernate 会发现,有现成的方法
Query对象
query.setFirstResult(A);//设置当前页码,从0开始
query.setMaxResults(B);//设置每页显示数目
参考技术A 你的问题很大啊......的问题很大啊......问题很大啊.....题很大啊....很大啊.....大啊.....啊......啊.....

以上是关于(JAVA)从数据库查出所有数据再分页的方法的主要内容,如果未能解决你的问题,请参考以下文章

SSM框架手动实现分页逻辑(非PageHelper)

MyBatis物理分页的代码实现

jsp+sqlserver 2005模糊查询分页时候点击那个首页或下一页的时候老是查出所有

Java面试-数据库篇

记一次在数据库中查询:“包含”或者“仅包含”某些商品的订单的方法

前台分页,以及类别选择