日期:2014-05-20  浏览次数:20700 次

求助,关于大容量数组分页显示的问题
我是菜鸟
现在有一个问题是这样的,程序在数据库中查询出3W左右的数据,保存到数组中后,在界面中一次全部显示会出错.
如果分页显示的话,实现代码大概是如何的?不能每次重新在数据库中查询符合当前页的数据(这样速度太慢).
有删除\上下页\首页\末页   按钮.所以每次调用的数组仍然是所有数据.只是页面只显示当前数据(从数组当中读取但不remove).

------解决方案--------------------
你中 Web 程序还是桌面应用程序?

如果是 Web 程序,三万条的数据,全存在数组中,可不是一种明智的选择,会对客户端造成相当大的压力的。还有你应该知道的是,没有人会从头一条一条地看完这些数据的,没有必要取出那么多,也许别人只会看第一页的。

建议还是采用取出当前页的数据,并采用数据库连接池,这样会很快的。
------解决方案--------------------
这个应该分次查询,而不是一次取出。
分页查询的代码依赖于数据库。
比如,如果是SQL Server2000要用到Top,是Oracle要用到Rownum……
------解决方案--------------------
分页两种方式:1.每次取出固定的条数的记录然后输出在页面上。2.取出所有记录放在集合里面然后每次输出固定的记录。

如果你采用第二种:
public class ListPaginationl {
private int sum; //所有数据
private int pageSum; //所有页
private int pageNumber=0; //页号
private int row =10; //每页显示数量

public List getAllPage(List allList,HttpSession session)
{
sum=allList.size();
pageSum=sum/row;
session.setAttribute( "pageSum ", " "+pageSum);
session.setAttribute( "pageNumber ", " "+pageNumber);
session.setAttribute( "table ", allList);
int start=pageNumber*row;
int over=start+row;

if(over> allList.size())
{
over=allList.size();
}
List l= allList.subList(start, over);
return l;
}
public List getpage(HttpSession session,int page_Number_Insert)
{
List allList =(List)session.getAttribute( "table ");
String page_Sum_Str=(String)session.getAttribute( "pageSum ");
int page_Sum =java.lang.Integer.parseInt(page_Sum_Str);
String page_Number_Str=(String)session.getAttribute( "pageNumber ");
int page_Number=java.lang.Integer.parseInt(page_Number_Str);

int start=0;
int over=0;

if(page_Number_Insert <=page_Sum)
{
session.setAttribute( "pageNumber ", " "+page_Number_Insert);
}
else
{
start=page_Number*row;
over=start+row;
}
List l= allList.subList(start, over);
return l;
}
public List nextPage(HttpSession session)
{
List allList=(List)session.getAttribute( "table ");
String page_Sum_Str=(String)session.getAttribute( "pageSum ");
int page_Sum =java.lang.Integer.parseInt(page_Sum_Str);
String page_Number_Str=(String)session.getAttribute( "pageNumber ");
int page_Number=java.lang.Integer.parseInt(page_Number_Str);
session.setAttribute( "pageNumber ", page_Number+1+ " ");
int start=(page_Number+1)*row;
if(start> allList.size())
{
start=0;
session.setAttribute( "pageNumber ", 0+ " ");
}
int over=start+row;
if(over> allList.size())
{
over=allList.size();
}
List l= allList.subList(start, over);

return l;
}
public List upPage(HttpSession session)
{
List allList=(List)session.getAttribute( "table ");
String page_Sum_Str=(String)session.getAttribute( "pageSum ");
int page_Sum =java.lang.Integer.parseInt(page_Sum_Str);
String page_Number_Str=(String)session.getAttribute( "pageNumber ");
int page_Number=java.lang.Integer.parseInt(page_Number_Str);
session.setAttribute( "pageNumber ", page_Number-1+ " ");
int start=(page_Number-1)*row;
if(start <0)
{