最容易想的法就是读出其中的纪录数,然后来算哪一页显示哪几条
重用好像是<jsp:usebean>吧,我也刚看jsp,不怎么清楚。

解决方案 »

  1.   

    分页是如下实现的,不过他每页都会重新取结果集,对于你想不重新读数据库,可以在第一次取出结果集然后放在Session中,以后就重Session里取记录<%--
    作者:何志强[[email protected]]
    日期:2000-08-03
    版本:1.0
    功能:JSP数据库操作例程 - 数据分页显示 - JDBC 2.0 - Oracle
    --%><%@ page contentType="text/html;charset=8859_1" %><%
    //变量声明
    java.sql.Connection sqlCon; //数据库连接对象
    java.sql.Statement sqlStmt; //SQL语句对象
    java.sql.ResultSet sqlRst;  //结果集对象java.lang.String strCon;    //数据库连接字符串
    java.lang.String strSQL;    //SQL语句int intPageSize;           //一页显示的记录数
    int intRowCount;           //记录总数
    int intPageCount;          //总页数
    int intPage;               //待显示页码
    java.lang.String strPage;int i;//设置一页显示的记录数
    intPageSize = 2;//取得待显示页码
    strPage = request.getParameter("page");
    if(strPage==null){//表明在QueryString中没有page这一个参数,此时显示第一页数据
       intPage = 1;
    }
    else{//将字符串转换成整型
       intPage = java.lang.Integer.parseInt(strPage);
       if(intPage<1) intPage = 1;
    }//装载JDBC驱动程序
    java.sql.DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());//设置数据库连接字符串
    strCon = "jdbc:oracle:thin:@linux:1521:ora4cweb";//连接数据库
    sqlCon = java.sql.DriverManager.getConnection(strCon,"hzq","hzq");//创建一个可以滚动的只读的SQL语句对象
    sqlStmt = sqlCon.createStatement(java.sql.ResultSet.TYPE_SCROLL_INSENSITIVE,java.sql.ResultSet.CONCUR_READ_ONLY);//准备SQL语句
    strSQL = "select name,age from test";//执行SQL语句并获取结果集
    sqlRst = sqlStmt.executeQuery(strSQL);//获取记录总数
    sqlRst.last();
    intRowCount = sqlRst.getRow();//记算总页数
    intPageCount = (intRowCount+intPageSize-1) / intPageSize;//调整待显示的页码
    if(intPage>intPageCount) intPage = intPageCount;
    %><html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <title>JSP数据库操作例程 - 数据分页显示 - JDBC 2.0 - Oracle</title>
    </head><body><table border="1" cellspacing="0" cellpadding="0">
    <tr>
       <th>姓名</th>
       <th>年龄</th>
    </tr><%
    if(intPageCount>0){
       //将记录指针定位到待显示页的第一条记录上
       sqlRst.absolute((intPage-1) * intPageSize + 1);   //显示数据
       i = 0;
       while(i<intPageSize && !sqlRst.isAfterLast()){
          %>
    <tr>
       <td><%=sqlRst.getString(1)%></td>
       <td><%=sqlRst.getString(2)%></td>
    </tr>
          <%
          sqlRst.next();
          i++;
       }
    }
    %></table>第<%=intPage%>页&nbsp;&nbsp;共<%=intPageCount%>页&nbsp;&nbsp;<%if(intPage<intPageCount){%><a href="jdbc20-oracle.jsp?page=<%=intPage+1%>">下一页</a><%}%>&nbsp;&nbsp;<%if(intPage>1){%><a href="jdbc20-oracle.jsp?page=<%=intPage-1%>">上一页</a><%}%></body>
    </html><%
    //关闭结果集
    sqlRst.close();//关闭SQL语句对象
    sqlStmt.close();//关闭数据库
    sqlCon.close();
    %>
      

  2.   

    To BrentIvan(Ivan):
    谢谢你的回答。我还有几个问题:
    我能把一个结果集的记录都放在session里吗?
    另外,我的bean里已经实现了分页功能,我怎么用在另一个页面里,使用这个bean的属性和方法?
      

  3.   

    bean有作用范围的,可以为Session, Application, Page的
      

  4.   

    结果集从理论上说可以放在session、数据库、本地文件或者客户端(cookie),如果你访问的是远程数据库,不如放在本地数据库中,除非你的数据量很小或者客户访问量不大。
      

  5.   

    To BrentIvan(Ivan):
    我听说bean的范围设为Session和Application是可以的,可是在另一个页面里我怎么用呢?
    希望你再关注一下,我现在就把分给你!
      

  6.   

    抢分了:
    在你第一次的调用Bean查询的Sevlet或Jsp中
    session.putValue("beanID",bean实例化的名字);
    在其它页面上声明如下:
    <jsp:useBean id="beanID" class="bean的包名+类名" scope="session" />
    然后,你可以在jsp中通过beanID使用这个Bean
      

  7.   

    你可以把结果集放在session中,
    比如说:你在Bean定义一个arraylist或vector,将resultset放入里面,然后你在页面上可以能过beanID.getXXXVector()就行了。
    处理数据就更加简单了,用vector和arraylist很容易就搞定了