想请教高人,我现在做的一个系统,基于Struts,所用数据库是SQLSERVER2000,现在遇到的问题就是分页查询,原来的实现是组合查询结果放到一个ArrayList中,然后将List放到Session中,在页面进行分页处理,当数据量小的时候没什么问题,可现在数据量很大3W以上,会报java heap space 错误,想寻求另外一种分页查询,一种是每次翻页都查询一次数据库或者一次读取和缓存如干页数据。想找人说说自己的设计思想,或有没有代码之类,最好考虑到我开发的代码,因为好多处地方都要改,希望重用性高。
解决方案 »
- 一个小问题!!
- Ubuntu下部署JAVA WEB项目,资源文件(.properties)路径如何解决?求解决方案
- 各位帮帮忙吧
- 关于 oracle自增长列和hibernate自增长列的区别
- Hibernate session和JSP servlet里面的session有什么区别和联系吗
- Web 服务器工作原理的问题
- 请问javax.rmi.PortableRemoteObject在什么样的文档里面有介绍?
- 快疯了!java.lang.NoSuchMethodError: org.jdom.Element.getChildren()Ljava/util/List;错误,如何解决!
- applet做好了,但是执行不了(一个送分的问题,菜鸟学习第一天)
- 关于RMI和EJB
- 求教:如何实现web service的动态调用
- tomcat 启动时报这个错 请高手帮忙
动态修改0,10这个参数就可以实现分页
不同数据,分页实现机制有所不同的
如果用hibernate的话,可以屏蔽这些限制
获得所有的行数后再加以计算循环取出你所需要的数据,每页显示多少行数据则取多少行。
Connection conn = null;
Statement stmt = null;
ResultSet rs = null; // 每页行数
private int pageSize = 5;
// 页数
private int pageNum = 0;
// 第几页
private int pageId = 1;
// 总共有多少行
private int num = 0; // 省略字段的get set方法
// 获取每页数据的业务方法
public List getData(int pageId,String sql) throws Exception {
conn = DB.getConn();
stmt = DB.getStmt(conn); //注意Statement的生成方式为:Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
rs = stmt.executeQuery(sql); // 游标移到最后
rs.last();
// 获取总计录数
this.num = rs.getRow();
this.pageNum = num / 4 + (num % 4 > 0 ? 1 : 0);
// 赋初值
this.pageId = pageId;
if (pageId < 1) {
this.pageId = 1;
} else if (this.pageId > this.pageNum) {
this.pageId = this.pageNum;
} rs.beforeFirst();
for (int i = 0; i < (this.pageId - 1) * this.pageSize; i++) {
rs.next();
}
ArrayList allDate = new ArrayList();
for (int j = 0; j < this.pageSize; j++) {
Javabean bean = new Javabean();
if (!rs.next()) {
break;
}
bean.setXXX(rs.getXXX());// 装载对应的数据
allDate.add(book);
} return allDate;
}
FROM table1
WHERE id NOT IN
(
SELECT TOP 页大小*(页数-1) id FROM table1 ORDER BY id
)
ORDER BY id
全部查出来,读取resultset的时候这样:
int i=0;
while( i<要读取的起始行 ) {
i++; //不读取resultset
}for( int i=0; i<读取行数&&rs.hasNext(); i++ ) {
读取resultset;
}
--------------
细粒度权限管理
www.metadmin.com
比如一页显示10条,让显示第二页:
select top 20 * from table1 where id in (select top 20 id from table1) and id not in (select top 10 id from table1);
比较好的是用hibernate中的分页:
Query q = session.createQuery("from Cat as c");
q.setFirstResult(20000);
q.setMaxResults(100);
List l = q.list();
你可以做一个自定义分页标签,代码有点多,我也不给你了。 虽然做起来有点麻烦 但是项目中用到的多的话,还是很好的
可惜我们的系统没用hibernate