Java中如何实现分页功能

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java中如何实现分页功能相关的知识,希望对你有一定的参考价值。

参考技术A 实现原理很简单,就是建立一个Page类,里面放当前访问的页数和每一页显示的记录行数。然后通过分页计算就可以得出下列数据。
总页数 = 总记录数/每页大小,如果0!=总记录数%每页大小,那么总页数再+1。
当前页数。
表记录的起始位置=(当前页数-1)*每页大小。
总记录数(select count(*) from [表名] [where [条件]]。从数据库中查询得到)
每页大小,可以固定,也可以从页面传过来有了这几个参数之后,就用sql语句查出对应的记录就可以了。

java分页

高手给我一个分页的例子啊,带注释的。
我xml结果输出在网页上,但是太多,我如何给分页,希望把所有用到的程序或什么的给个简单的例子。我很菜,请高手千万帮忙,不胜感激!!!

分页想清楚了就没什么难的了。一般有两种(我就知道两种):

1.数据库分页:
/**
* @param pageItems:一页显示条数 currentPage:当前第几页
* @autor godelegant
*/
public List findAll(int pageItems,int currentPage)
StringBuffer sqlStr = new StringBuffer("select * from Product limit ?,?");
...
...
int startIndex = (currentPage-1)*pageItems;);//(currentPage-1)*pageItems能过当前页和页面记录数得到应该从哪条开始取
int endIndex = startIndex+pageItems;
db.getPstmt().setInt(1,startIndex);
db.getPstmt().setInt(2,endIndex);
ResultSet rs = db.getPstmt().executQuery();//假设你已经得到了数据库连接

//以上为MYSQL的JDBC分页,下面是ORALCE的,差别只在于SQL,所以你换一下SQL就OK:
StringBuffer sqlStr = new StringBuffer("select *,rownum rn from (select * from Product) where rn <=? and rownum >=?");


求总页数的方法很简单,查出所有记录数,除一页显示数。就可以得到

以上是JDBC的,如果使用hibernate等,数据库分页将会变得很简单,只需要设置两个参数,就是从哪取和取多少。

2.代码分页
思路是将数据库中的所有记录都取出来,然后再分页。
/**
* @para items:数据库中的所有记录,你可以使用另一个方法得到,如何查询得到我就不用说了吧
* @autor godelegant
*/
public List findAll(List items,int pageItems,int currentPage)
int startIndex = (currentPage-1)*pageItems;//从哪里开始取
int offset = items.size()-startIndex;//还有多少没有取过

int pageCount = offset>pageItems?pageItems:offset;//如果没有取过的大于需要显示的数,则实现显示数pageCount=pageItems,反之然;

List<Product> pageList = new ArrayList();
for(int i=startIndex,i<startIndex+pageCount,i++)
pageList.add(items.get(i));


return pageList;



写了40分钟,希望对你有用
参考技术A 最好是在业务逻辑(service)层定义好分页的方法,调用DAO层的分页方法咯,其实还是在dao层分页的,不要全部数据读出来再分页,耗内存。 参考技术B 纯粹的JAVA分页意义不大,现在大多用的是框架的分页,每种JEE框架都有自己的分页的机制。

以上是关于Java中如何实现分页功能的主要内容,如果未能解决你的问题,请参考以下文章

ABAP中如何实现强制分页/如何设置打印机和打印格式?

在JSP中如何实现分页技术啊?

asp.NET分页如何实现?

java ajax分页问题

JAVA如何实现留言时间(几秒前,几分钟前,几小时前....)的功能?

java 数据放在了list中,如何实现前台分页