给你一个例子:package com;public class Student {
    private String sNo ;
    private String sName ;
    private String sSex ;
    private int iAge ;public Student() {
init();
}private void init() {
     sNo = "" ;
     sName ="" ;
     sSex ="" ;
     iAge =0 ;
}public String getsNo(){
return sNo ;
}public String getsName(){
return sName ;
}public String getsSex(){
return sSex ;
}public int getiAge(){
return iAge ;
}public void setsNo(String t_sNo){
sNo = t_sNo ;
}public void setsName(String t_sName){
sName = t_sName ;
}public void setsSex(String t_sSex){
sSex = t_sSex ;
}public void setiAge(int t_iAge){
iAge = t_iAge ;
}
public Student[] getStudents(){
Student[] aStudents = null ;
ResultSet result = Conn.getStatement().executeQuery(sSqlStr);
  Vector  vStudents = new Vector();
while(result.next()) {
        Student oStudents = new Student();
        oStudents.setsNo("NO_"+i) ;
        oStudents.setsName("Name_"+i) ;
        oStudents.setsSex("Sex_"+i) ;
        oStudents.setiAge(i*10) ;
        vStudents.add(oStudents);
    }
int iCount = vStudents.size();
aStudents = new Student[iCount];
vStudents.copyInto(aStudents);
return  aStudents ;
}}你也可以不用数组返回,直接用vector.
在jsp中取数据可用。
com.Student aStudent = new com.Student().getStudents();
if (aStudent!=null)
{
   for (int i=0;i<aStudent.length;i++){
       out.print(aStudent[i].getsNo()) ;
       out.print(aStudent[i].getsName()) ;
      ................
  }}你应该知道了吧。:)

解决方案 »

  1.   

    sorry:        oStudents.setsNo("NO_"+i) ;
            oStudents.setsName("Name_"+i) ;
            oStudents.setsSex("Sex_"+i) ;
            oStudents.setiAge(i*10) ;
            
           应为:
            oStudents.setsNo(result.getString("No")) ;
            oStudents.setsName(result.getString("Name")) ;
            oStudents.setsSex(result.getString("Sex")) ;
            oStudents.setiAge(result.getInt("Age")) ;
      

  2.   

    你要先取出来后分页呢?还是先分页后再取出?
    两种方法。
    你自己好好想想吧。
    我上面只是对记录的取出,如是还是先分页后再取出,ResultSet result = Conn.getStatement().executeQuery(sSqlStr);中的sSqlStr是分页后的语句。
    如果是先取出来后分页的话,不用我说了吧。
      

  3.   

    to xg_delayth(铁鹰):Anderu:
    左思右想:我还是没转过来,以往我分页都这么做:******************************************************
    ResultSet rs=workM.executeQuery(sql); 
     //以下用与分页:
     rs.last();
     rowCount = rs.getRow();
     //out.println(rowCount);
     //记算总页数
    pageCount = (rowCount+pageSize-1) / pageSize;
    //调整待显示的页码
    if(currPage>pageCount) currPage = pageCount;
    if(pageCount>=0)
    {
    //out.println(pageCount);
    //将记录指针定位到待显示页的第一条记录上
    rs.absolute((currPage-1) * pageSize + 1);//显示数据
    i = 0;
    %><table width=599 class="c-6" cellspacing=1 cellpadding=1>
    <tr class="c-5"><td colspan="5" align="center"><font color=blue><% if(request.getParameter("querytype")==null){ %><%=bname %><% } else { %><%="查询结果" %><% } %></font> </td></tr>
    <tr class="c-4"><td align=center>书名</td><td align="center">作者</td><td align="center">人气</td><td align="center">书的简介</td><td align="center">下载地址</td></tr>  
    <% 
    String myerror=null;
    String lid=null;
    //rs.next();
    try

       lid=rs.getString("ID");
     }
     catch(Exception e)
     {
       myerror="error";
       //out.println("yangping");
     }   
    //rs.previous();
    rs.absolute((currPage-1) * pageSize + 1);
    if(myerror==null)
    {
      while(i<pageSize && !rs.isAfterLast())  {
       String dau=" ";
       String ddes=" ";
       String ddo=" ";
       if(rs.getString("author")==null)
       {
        dau="暂无";
       }
       else
       {
        dau=rs.getString("author");
    }
       if(rs.getString("description")==null)
       {
        ddes="暂无";
       }
       else
       {
        ddes=rs.getString("description");
    ddes=workD.checkString(ddes,30); 
    }
     if(rs.getString("dowloadurl")==null)
       {
        ddo="暂无";
       }
       else
       {
        ddo=rs.getString("dowloadurl");
    }

    %>
    <tr class="c-0">
    <td align="center"><a href="onebook.jsp?id=<%=rs.getString("ID") %>"><%=rs.getString("NAME") %></a></td>
    <td align="center"><%=dau %></td>
    <td align="center"><%=rs.getString("HIT") %></td>
    <td align="center"><%=ddes%></td>
    <TD align="center"><%=ddo%></TD>
    </tr>
    <%
    rs.next();
    i++;}
    }
    } rs.close();
     rs=null;
     workM.closeConn();
     %>
     <tr class="c-0"><td colspan=5 align="right">
    第<%=currPage%>页 共<%=pageCount%>页 
    <%if(currPage<pageCount){%><a href="booklist.jsp?page=<%=currPage+1%>&id=<%=bid %>&name=<%=bname %>"><font color=blue>下一页</font></a><%}%>
    <%if(currPage>1){%><a href="booklist.jsp?page=<%=currPage-1%>&id=<%=bid %>&name=<%=bname %>"><font color=blue>上一页</font></a><%}%>                                                                   *************************************                              to Andrawu :
    你那段代码是我要做的,但我想知道从jsp获取到了装有对象集合的 vector后如何进行分页,分页得做到jsp文件中吧?(这时已经没有rs...的东西了)。
    “如果是先取出来后分页的话,不用我说了吧。”----不用你说了那部分可能是我想知道的 :)to xg_delayth(铁鹰):
     sorry.由于小弟水平有线,没有象你那样做过,先取出一定数量记录显示,等到翻页时再取出一定数量显示,(我以前是全拿出来,再分页)我现在主要想把取出记录的方法封装到bean当中,在jsp文件中不会看到任何sql语句,还有connection,resultset....jdbc对象.不知道大虾们明没明白我的意思
      

  4.   


    现在干脆问大家一个直观的问题:你们在从数据库中取出记录的时候采用的是什么方法,是
    通过executeQuery(sql)将resultset 对象返回给jsp.还是把对象集合
    Vector 返回给jsp?如果是后者,分页如何解决的?
      

  5.   

    呵呵,明白了:)
    不过用vector保存所有的记录是很差的哟。
    com.Student aStudent = new com.Student().getStudents();
    if (aStudent!=null)
    {
    int rowCount = aStudent.length ;
    int pageSize = 20 ;
    int pageCount = (rowCount+pageSize-1) / pageSize;
    int currPage ;   for (int i=currPage*pageSize;i<(currPage+1)*pageSize;i++){
           out.print(aStudent[i].getsNo()) ;
           out.print(aStudent[i].getsName()) ;
          ................
      }}以上代码没有写完全,自己完成吧。:)
      

  6.   

    非常感谢Andrawu,就是这个意思。
    “不过用vector保存所有的记录是很差的哟。”,是什么意思?速度会很慢?你一般采用什么方法?
      

  7.   

    这个问题我们已经讨论过了,看看精华区就知道了。http://www.csdn.net/Expert/TopicView1.asp?id=621168
      

  8.   

    分页我还是强调最好用SQL 实现,因为使用connect pool后连数据和查询的时间几乎是很短的,但却可以避免将大量的数据保存在服务器上占用资源。你想如果你象我一样有一个500M的表。里面有70万条纪录,难道你还能把这个保存在vector里再分页?
      

  9.   

    分页的时候提高效率一个很重要的原则就是只需要返回当前页所需的数据就可以了:
    strSQL="select * from table";//这是分页所需的语句,假设当前页需要显示这个结果集的41到50条记录
    pageSQL="select    IDENTITY(int,1,1)  as  Nbr,*    into  #tmp  From  ("  +strSQL  +  ")  as  temp  order  by  Nbr  select  *  from  #tmp  where  nbr  between  41  and  50  drop  table  #tmp  " ;
    //上面的SQL语句就可以达到这个要求了
      

  10.   

    分页的时候提高效率一个很重要的原则就是只需要返回当前页所需的数据就可以了:
    strSQL="select * from table";//这是分页所需的语句,假设当前页需要显示这个结果集的41到50条记录
    pageSQL="select    IDENTITY(int,1,1)  as  Nbr,*    into  #tmp  From  ("  +strSQL  +  ")  as  temp  order  by  Nbr  select  *  from  #tmp  where  nbr  between  41  and  50  drop  table  #tmp  " ;
    //上面的SQL语句就可以达到这个要求了
      

  11.   

    to weidegong(weidegong) 这个SQL具体怎么写是要看用什么数据库的。mysql最容易,sqlserver可以top来实现。oracle就要用RowNum来实现了。
      

  12.   

    经wei大侠的一番话后,小弟又糊涂了,呵呵。这语句好复杂,没用过。
    wei有小例子否,给点源码。小弟也准备给以上的兄弟们加分。非常感谢你们!
      

  13.   

    我用的是oracle8。16。
    to beloved:
    你有小例子吗?谢谢!
      

  14.   

    呵呵,胡涂?你的分页是这样,得到所有记录,然后将记录定位在当前页需要显示的记录上,如下:
    //将记录指针定位到待显示页的第一条记录上
    rs.absolute((currPage-1) * pageSize + 1);
    我提到的就是说,通过修改SQL语句,返回的记录集rs直接就是当前页需要显示的数据而没有多余的全部其他数据。另外我上面的例子中是针对SQLServer的,oracle也有相关办法可以实现。我页没装oracle,没法测试,你去Oracle版问问也许好些
      

  15.   

    to pingju(穆斯林信徒):我来写
    select * from (select a.*,rownum mynum from tablename order by...)
    where mynum>20 and mynum<30
      

  16.   

    to  xg_delayth(铁鹰) :
    你的SQL只能用在8i以后的版本吧。以前的是不支持在内曾查询中用ORder by的。以前的版本可以用三重子查询,将rownum作为伪列,在外层子查询中对其限定值select * from (select rownum pagenum,a,b,c from (select * from tabl1) )where pagenum<60 and pagenum>30在8.17以后就可以用row_number() over了。哈哈。
    select * from 
    (select ..... row_number() over( .....order by ......) num from xxx) aaa 
    where aaa.num > ? and aaa.num < ?