首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

,关于大容量数组分页显示的有关问题

2012-01-26 
求助,关于大容量数组分页显示的问题我是菜鸟现在有一个问题是这样的,程序在数据库中查询出3W左右的数据,保

求助,关于大容量数组分页显示的问题
我是菜鸟
现在有一个问题是这样的,程序在数据库中查询出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)
{


start=page_Sum*10;
session.setAttribute( "pageNumber ",page_Sum+ " ");
}
int over=start+row;
if(over> allList.size())
{
over=allList.size();
}
List l=allList.subList(start, over);

return l;
}
public List getFindCompany(Auditadministrationorg c) throws Exception {
HQLAccessor accessor = null;
accessor = DBFactory.getHQLAccessor();
Map maps = new HashMap();
maps.put( "company ", "% "+c.getCompany()+ "% ");
maps.put( "comkind ", "% "+c.getComkind()+ "% ");
maps.put( "comprincipal ", "% "+c.getComprincipal()+ "% ");
maps.put( "chamber ", "% "+c.getChamber()+ "% ");
maps.put( "chamberprincipal ", "% "+c.getChamberprincipal()+ "% ");
maps.put( "person ", "% "+c.getPerson()+ "% ");
String hql= "findAllAuditadministrationorg ";
try{


List list=accessor.query(hql,maps);
return list;

}finally{
if(accessor != null){
try {
accessor.close();
} catch (DBException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}
}

}

热点排行