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

解决方案 »

  1.   

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

  2.   

    这个应该分次查询,而不是一次取出。
    分页查询的代码依赖于数据库。
    比如,如果是SQL Server2000要用到Top,是Oracle要用到Rownum……
      

  3.   

    楼上说得对的,MySQL 最简单使用 limit,我认为 SQL Server 最复杂特别是多表联接的时候。
      

  4.   

    分页两种方式: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();
    }
    }

    }
    }

    }