csdn里面有一篇文章就是说这个的,你到新文档里去看看。一下也说不清

解决方案 »

  1.   

    可以自己设计一个类,里面的属性有:搜索的总记录数,每页显示的记录数,当前申请的页数。
    可以看看这个:package common;
    import java.sql.*;
    import java.util.*;
    import db.DBPool;public class PageObj 
    {
    public int p_intPrePage=0;
    public int p_intPageCount=1;
    public int p_intCurPage=1;
    public int p_intRecordCount=0;
    public  PageObj()
         {
     p_intPrePage=15;//每页默认的记录数为15条
     p_intCurPage=1;
     p_intPageCount=1;
     p_intRecordCount=0;
         }
    //设定每页的记录数
    public void setPrePage(int v_intPrePage)
    {
    if(v_intPrePage>0)
      p_intPrePage=v_intPrePage;
    }

    public Object[] JspPageData(String v_strSQL, int v_intGotoPage)
    {
    Object[] f_Objects=null;
            ResultSet f_ResultSet=null;
            Statement f_Statement=null;
            Connection f_Con=DBPool.getConn();
            
    int f_intToPage=1;
    if (v_intGotoPage>p_intPageCount)
    {
    f_intToPage=p_intPageCount;
        p_intCurPage=p_intPageCount;
    }
    else
        {
      f_intToPage=v_intGotoPage;
      p_intCurPage=v_intGotoPage;
        }
    try
    {
      f_Statement=f_Con.createStatement();
              f_ResultSet=f_Statement.executeQuery(v_strSQL);
             
              f_Objects=RetObjHashMap(f_ResultSet,f_intToPage);
           
              f_ResultSet.close();
              f_Statement.close();
              f_Con.close();
    }
    catch(Exception E)
    {
    System.out.println("JspPageData.err:="+E.getMessage());
    }
    return f_Objects;
    }

    private Object[] RetObjHashMap(ResultSet v_Rs,int v_intToPage) 
        {
             int position=0;
             ResultSet f_Rs=v_Rs;
             try
     {
             Vector f_Results=new Vector();
             Vector f_ColumNames=GetColumNames(f_Rs);
             
             for(int f_intF=0;f_intF<(v_intToPage-1)*p_intPrePage;f_intF++)
             {
              f_Rs.next();
             }
             for(int f_intK=0;f_intK<p_intPrePage;f_intK++)
             {
             if(f_Rs.next())
               {
                   HashMap f_Row=new HashMap();
                   for(int f_x=0;f_x<f_ColumNames.size();f_x++)
                       {
                           String f_columName=(String)f_ColumNames.elementAt(f_x);
                           String f_Value=f_Rs.getString(f_columName);
                           if(f_Value==null)
                               {
                                  f_Value=new String("");
                               }
                            else
                                {
                                    while ((position = f_Value.indexOf("\r\n",position)) !=-1 )
                                          {
                                              f_Value = f_Value.substring(0,position)+"<br>"+f_Value.substring(position+2);
                                          }
                                }
                           f_Row.put(f_columName,f_Value);
                        }
                    f_Results.addElement(f_Row);
               }
             }
            return f_Results.toArray();
     }
             catch (Exception E)
     {
              System.out.println("DBObj.RetObjHashMap Err="+E.getMessage());
              return null;
     }
        }

    //返回总页数,
    //传入的参数 v_strPageCountSQL 查询总记录数的SQL语句
    //v_strPageCountSQL  的形式为:from Table where 从from 开始
    public int retPageCount(String v_strPageCountSQL)
    {
    try
    {
    p_intPageCount=1;
    Connection f_con=DBPool.getConn();
    ResultSet f_Rst=null;
    int f_intTotalCount=0;
    String f_strQ="select count(*) as count "+v_strPageCountSQL;
    Statement f_strMT=f_con.createStatement();
    f_Rst=f_strMT.executeQuery(f_strQ);
    f_Rst.next();
    f_intTotalCount=f_Rst.getInt("count");
    p_intRecordCount=f_intTotalCount;
    if (f_intTotalCount>0)
    {
    int f_intPgc=f_intTotalCount%p_intPrePage;
    if (f_intPgc==0)
    {
    p_intPageCount=f_intTotalCount/p_intPrePage;
    }
    else
    {
    p_intPageCount=f_intTotalCount/p_intPrePage+1;
    }
    }
    }
    catch (Exception E)
    {
    System.out.println("retPageCount.Err"+E.getMessage());
    }
    return p_intPageCount;
    }


    // retrun columnames
     public Vector GetColumNames(ResultSet v_rs) 
         {
           try
             {
              ResultSetMetaData f_md = v_rs.getMetaData();
              int f_intCount = f_md.getColumnCount();
              Vector f_columnNames = new Vector(f_intCount);
              for(int x = 0; x < f_intCount; x++)
                {
              f_columnNames.addElement(f_md.getColumnName(x + 1));
                }
              return f_columnNames;  
             }
           catch (Exception E)
                 {
                   System.out.println("GetColumNames"+E.getMessage());
                 }
           return null;
         }
    }
      

  2.   

    Db pool是:
    package db;import java.sql.Connection;import javax.naming.Context;
    import javax.naming.InitialContext;
    import javax.sql.*;
    public class DBPool
    {
      public static Connection getConn()
        {
            Connection conn=null;
            try
             {
               Context ctx=new InitialContext();
               if ( ctx == null )
                   throw new Exception("no match environment");
               DataSource ds=(DataSource)ctx.lookup("dbwpool");
               ctx.close();
               if(ds==null)
                   throw new Exception("no match database");
                   conn = ds.getConnection();
             }
            catch (Exception e)
             {
                 System.out.println("DBPool.getConn() throw a exception :" + e.getMessage());
             }
            return  conn;
         }
    }
      

  3.   

    谢谢可我是不太明白我是这样做的:
        首先我用一个方法将大标题  "选择"  查询出来             返回结果ArrayList对象
        然后根据大标题的ID为参数查询  "每小题的题目"           返回结果ArrayList对象
        再以每小题的题目ID为参数查询  "选项内容" 即A.          返回结果ArrayList对象 
                                                B.
                                                C.
                                                D.    三种不同的数据都用三个bean保存起来,再分别用ArrayList集合把三个bean add(),那么应该用什么样的方法将这三个综合起来显示上面的结果
      

  4.   

    我最近做的一个项目是这样的
    当前页为currPage页(如第五页)
    每页显示pageSize条(如20条)
    然后用一个循环
    在currPage页只需要从数据库里面读取从
    (currPage-1)*pageSize + 1

    (currPage)*pageSize
    的数据
    则刚才的假设情况下,就从数据库读取第81条到100条记录就可以了
    没有必要将结果完全返回,而且这样代价也比较大……
    如果返回结果太多………………