参考
http://www.csdn.net/expert/topic/300/300403.shtm
http://www.csdn.net/expert/topic/300/300403.shtm
解决方案 »
- short s1 = 1; s1 += 1; 这样写对吗?
- 用swing 做个增加用户界面
- timer基础问题
- 请问一下,默认的类型就是public啊,为什么此为处不加public会编译错误?
- 怎么把字节数组转化为字符串效率最高
- Access 驱动程序] 参数不足,期待是 1。
- 想请问各位朋友一个问题
- java语言有没有对+,==,,的运算副重载机制
- SQL语句问题.(在线等待)
- 使用简单文件操作的java小程序
- ★★★★★我精通VB, 精通C++, 了解WINDOWS C, 略懂MFC, 智商中等. 请问, 在这样的基础上, 我从JAVA一窍不通开始学JAVA, 用多长时间可以掌握JAVA? ★★★★★
- 测试相等性,用==和equals有什么不同?
int pagecount=0;//总页数
int pages=0;//当前页
int pagesize=100000;//每页显示的记录数
rs=DBop.executeQuery(szSql);
while(rs.next())
{count++;}
rs.close();
if(count%pagesize==0)pagecount=count/pagesize;
else pagecount=count/pagesize+1;
String szPages=request.getParameter("pages");
if(szPages==null) pages=1;
else{
pages=new Integer(szPages).intValue();
if(pages<=0) pages=1;
}
int first=(pages-1)*pagesize+1;
int last=first+pagesize-1;
rs=DBop.executeQuery(szSql);
for(int i=1;i<=(pages-1)*pagesize;i++) {rs.next();}//将指针指到每页的首记录
下一页按钮
a href="more1.jsp?pages=<%=(pages-1)%<img border=0 height=21 src="../images/sbutton-backpage.gif" width=59></a>
作 者:redstarstar
所属论坛:Java
问题点数:50
回复次数:21
发表时间:2001-9-24 14:44:49
今天做个项目,数据库中有几十万条记录,查询显示的结果也有几万到十几万的记录,所以我原来的分页显示就用不了了(方法太笨:又耗资源,又慢)。
不知大家都是如何进行分页的,并能够适合我这种大数据量的情况!
主要困扰我的问题:如何加快速度?几十万条的纪录查一次很费时间,我不想每次在不同的页码间跳转时都查一次数据库,但又不可能在第一次查询时就将所有的结果保存起来(我试过出现out of memory)。谁有好办法吗???
回复贴子:
回复人: hexiaofeng(java爱好者) (2001-9-24 14:53:33) 得0分
可以设置 数据库指针
回复人: kangaroo(名草) (2001-9-24 14:55:34) 得0分
关注!!!!!
回复人: redstarstar(红星星) (2001-9-24 14:57:10) 得0分
目前我的想法是:每次存储部分查询结果:每页显示数目*10;当用户点击显示下10页时,再存储接下来的:每页显示数目*10。这样可以解决将查询结果全部存储耗费资源的问题,和在每10页切换时速度的问题。
大家有什么高见吗?
回复人: redstarstar(红星星) (2001-9-24 15:00:00) 得0分
关于指针和resultset,我觉得涉及一个与数据库连接的问题,如果我保存resultset,那我何时关闭与数据库的连接呢,总不能用户查询一次我就开一个连接呀!这样很快就会达到最大连接的!
回复人: wilddragon(帅帅) (2001-9-24 15:42:35) 得0分
期待答案
回复人: hexiaofeng(java爱好者) (2001-9-24 15:45:26) 得0分
在本页显示完毕,就关闭连接
回复人: redstarstar(红星星) (2001-9-24 16:38:32) 得0分
如果用游标或resultset的话,好像无法在本页就关闭连接吧!
回复人: redstarstar(红星星) (2001-9-24 16:54:19) 得0分
没有高手吗????
回复人: hegum(hg) (2001-9-24 16:57:11) 得10分
有本书叫 Java servlets什么的,我记不清楚拉,你到网上书店查吧,里面有个好例子!!!!!!!!!
回复人: X25(X25) (2001-9-24 16:59:48) 得10分
CREATE PROCEDURE SP_GetauthorPage(
@CurrentPage int,
@PageSize int
) AS
declare @sSQL1 varchar(500)
declare @sSQL2 varchar(500)
declare @iCount int
declare @PageCount int
declare @RecordCount intset @iCount=@CurrentPage*@PageSize
print @iCountselect @RecordCount=Count(*) from author
print @RecordCountif @RecordCount >0
begin
if @RecordCount % @PageSize=0
begin
set @PageCount=@RecordCount/@PageSize
end
else
begin
set @PageCount=@RecordCount/@PageSize+1
end
if @CurrentPage<=@PageCount and @CurrentPage>0
begin
set @sSQL1='(select top '+ ltrim(rtrim(str(@iCount))) +' * from author order by au_lname ) as tmp'
--print @sSQL1set @sSQL2='select top ' +ltrim(rtrim(str(@PageSize)))+' * from '+@sSQL1 +' order by au_lname desc '
print @sSQL2EXEC(@sSQL2)
end
else
begin
select top 0 * from author
endend
else
begin
select * from author
end
GO
回复人: hegum(hg) (2001-9-24 17:00:41) 得0分
Java开发指南——Servlets和JSP篇
(美)Bill Brogden/ 7-5053-6658-0/电子工业出版社
回复人: redstarstar(红星星) (2001-9-24 17:23:09) 得0分
我只要大家给个最可行,最实际的思路和方法就可以了,编程我自己来就行了。
to hegum(hg):
你能告诉我那本书里例子的思路吗?
回复人: tiangou(分数不多就去灌水乐园) (2001-9-24 17:39:21) 得10分
我也在做这样的事,我用的是java servlet 网页显示,我是这样的处理的,用存储过程将记录取出来,定义一个Vector()矢量,用rs.next()!=null将rs中的记录取出来放到Vector中,再将Vector放到session中,分页显示时从session中取数据,你有足够大的内存就可以了,我的记录控制在2000条内。还有我想问一个很简单的问题:如果查询记录有几万到几十万条,即使你实现了分页显示,就当你一页显示100条,那你至少也要一百多页,那你怎么知道你所要的在哪一页?这样做有意义么?
回复人: redstarstar(红星星) (2001-9-24 18:32:17) 得0分
我最早也是采用你那种方法,即将所有的纪录全部取出来,存在Vector中,我是把vector放在了一个bean中,但那会我们数据库中最多才3000多条记录。现在已经有10几万的记录了,所以将纪录全部取出,就造成了out of memory!
你觉得我后来的方案如何呢?(14:57分发的那个)这点我也想过,所以我还会再做一个功能,就是在以得到结果中的再次查询(怎么实现还没想好)
回复人: redstarstar(红星星) (2001-9-24 21:45:33) 得0分
up!
回复人: yorkchen(天同) (2001-9-25 14:08:41) 得0分
存储过程支持分页查询
存储过程做查询时 一次只查回 想要的第几条到第几条
回复人: lick(谁能告诉鹰在空中的路……) (2001-9-25 14:19:02) 得10分
在jdbc里采用sql语句解决,每次翻页查询数据库,取出每次所需要的几条数据,一个sql轻松解决,前提是获得已经获得所有的页数,包括你的记录总数
采用vector解决对于数据量小比较合适,大数据量不行,一次查询放到session里,如果用户量很大,服务器可能撑不住
回复人: bobokong(寻找编程的乐趣) (2001-9-25 17:47:31) 得10分
是不是可以这样整个网站用一个JavaBean,里面存所有的几十万条数据(可以用Vector),所有的查询从它里面取
然后再做一个JavaBean用来访问上面一个JavaBean,提供一些方法来实现分页查询。
做一个类似监听器的程序,如果数据库有更新,就自动的更新第一个JavaBean.缺点,如果类似的分页页面很多就特别耗内存,但只有一两个应该行吧?
回复人: bobokong(寻找编程的乐趣) (2001-9-25 17:51:18) 得0分
另一个参考www.google.com,楼上有人题过
每次取十页放在Session中,十页十页的从数据库中取。
页面上可以提供 前十页 1 2 3 4 5 6 7 8 9 10 后十页缺点速度稍慢,
回复人: rox(rox) (2001-9-25 18:26:14) 得0分
关注!
回复人: hegum(hg) (2001-9-29 16:26:22) 得0分
我觉得你还是应该看看
Java开发指南——Servlets和JSP篇
(美)Bill Brogden/ 7-5053-6658-0/电子工业出版社
里面有连接池等提高性能的东西!可惜我没有这本书,以前在学校图书馆看的