从数据库中检索出来的结果如何分页显示,用到哪些技术,看了一些例程,写的不是很明白,请赐教!

解决方案 »

  1.   


    <%@ page contentType="text/html;charset=gb2312" %><%@ page import="java.sql.*, javax.sql.DataSource, javax.naming.InitialContext" %><% //建立一个JNDI查找对象 InitialContext JNDI_Context = new InitialContext(); //JNDI查找数据源 DataSource ds = (DataSource) JNDI_Context.lookup("jdbc/mysqlDbPage"); //得到一个数据源连接Connection conn = ds.getConnection(); 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;} // 得到结果stmt = conn.createStatement(); ResultSet sqlRst = stmt.executeQuery("select f1 from test"); //获取记录总数 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 - mysql</title> </head> <body> <table border="1" cellspacing="0" cellpadding="0"><tr> <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> </tr><% sqlRst.next(); i++; } } %> </table>第<%=intPage%>页 共<%=intPageCount%>页 <%if(intPage<intPageCount){%><a href="mysqlpage.jsp?page=<%=intPage+1%>">下一页</a><%}%><%if(intPage>1){%><a href="mysqlpage.jsp?page=<%=intPage-1%>">上一页</a><%}%> </body> </html><% //关闭结果集 sqlRst.close(); 
      

  2.   

    allan1031(唐加西亚~米兰)兄,十分感谢!我试试,如果再有不懂的还要向你请教啊!
      

  3.   

    分页最好是用SQL了,上面那样数据一多的话,会出现很多问题哦
      

  4.   

    先用sql查询,再用游标定位你要的数据段(就是你要显示在一页上的那些数据,可以根据页号和总页数判断),最后取出来扔到页面上不就行了么?然后下一页就把刚才的页号+1,还用这个方法去做,那不就是下一页了么。呵呵
      

  5.   

    呵呵,传递参数时带上sql和要求的页面值啊。:)
      

  6.   

    各位大侠,谢谢你们的帮助!
    在SQL语句里如何控制取出来的记录数,比如一共有100条,我条取出前十条,第二次再读后10条。
    象前面说的,如果数据量大的话,一次用SQL语句取出来不是很不合理嘛,浪费资源,而且速度慢。
    我是菜鸟,请各位明示!
      

  7.   

    呵呵,可是你有多大的数据量亚一般情况下,1万条数据用这个算法也不慢那,就select * from xxx.....,主要问题可能就是内存需要量比较大。这种语句数据库操作起来很容易的,所以速度上不会有问题的。
      

  8.   

    <%@  page  contentType="text/html;charset=gb2312"%>    
    <%      
    //变量声明      
     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,j,k;  //设置一页显示的记录数      
     intPageSize  =  3;  //取得待显示页码      
     strPage  =  request.getParameter("page");      
     if(strPage==null){    
     //表明在QueryString中没有page这一个参数,此时显示第一页数据      
     intPage  =  1;      
     }  else{    
     //将字符串转换成整型      
     intPage  =  java.lang.Integer.parseInt(strPage);      
     if(intPage<1)  intPage  =  1;  }    
     //装载JDBC-ODBC驱动程序      
     Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
     //设置数据库连接字符串      
     strCon  =  "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mydb";      
     //连接数据库      
     sqlCon  =  java.sql.DriverManager.getConnection(strCon,"dike8523$","dike8523$");      
     //创建SQL语句对象      
     sqlStmt  =  sqlCon.createStatement();      
     //获取记录总数      
     strSQL  =  "select count(*) from  ly1";      
     sqlRst  =  sqlStmt.executeQuery(strSQL);      
     //执行SQL语句并取得结果集      
     sqlRst.next();  //记录集刚打开的时候,指针位于第一条记录之前      
     intRowCount  =  sqlRst.getInt(1);      
     sqlRst.close();  //关闭结果集      
     //记算总页数      
     intPageCount  =  (intRowCount+intPageSize-1)  /  intPageSize;      
     //调整待显示的页码  if(intPage>intPageCount)  intPage  =  intPageCount;      
     //设置获取数据SQL语句      
     strSQL  =  "select  lname,lemail,content  from  ly1 ORDER BY id DESC";      
     //执行SQL语句并取得结果集      
     sqlRst  =  sqlStmt.executeQuery(strSQL);    
     //将记录指针定位到待显示页的第一条记录上      
     i  =  (intPage-1)  *  intPageSize;      
     for(j=0;j<i;j++)  sqlRst.next();  %>      
     <html>      
     <head>    
     <title>分页显示</title>    
     </head>      
     <body>      
    <table  border="0"  cellspacing="0"  cellpadding="0"  width=500  align=center>     
    <%      
     //显示数据      
     i  =  0;      
     while(i<intPageSize  &&  sqlRst.next()){  %>      
    <tr bgcolor=#336699>
    <td colspan=2 >~~~留言~~~</td>
    </tr> 
    <tr>      
    <td>用户名:<%=sqlRst.getString("lname")%></td>    
    </tr>
    <tr>
    <td>邮件:<%=sqlRst.getString("lemail")%></td>    
    </tr>
    <tr>
    <td>内容:<%=sqlRst.getString("content")%></td>    
    </tr>  
    <tr><td><hr width=500 boder=1></td></tr>
    <%  i++;  }  %>    
     <tr>      
    <td  colspan=2  align=center>      
     第<%=intPage%>页    共<%=intPageCount%>页        
     <%if(intPage<intPageCount){%>    
     <a  href="ly3.jsp?page=<%=intPage+1%>">下一页</a><%    
     }    
     %>        
     <%if(intPage>1){%>    
     <a  href="ly3.jsp?page=<%=intPage-1%>">上一页</a><%    
     }    
     %>      
     </td>      
     </tr>    
     </table>  
    <hr width=500 boder=1>
    </body>      
     
    </html>      
     
    <%      
     
    //关闭结果集      
     
    sqlRst.close();      
     
    //关闭SQL语句对象      
     
    sqlStmt.close();      
     
    //关闭数据库    
     
    sqlCon.close();    
     
    %>
      

  9.   

    上面allan1031(唐加西亚~米兰)的做法就使用了游标啦,和我说的意思差不多,甚至连取得总记录数的代码都是一摸一样的,你可以参考他的做法,再自己揣摩一下,应该就可以拉。当然拉,allan连接数据库是用DataSource连的,这个你也可以用jdbc连,呵呵。还有就是声明stmt的时候,最好这么写:
    stmt = conn.createStatement(
    ResultSet.TYPE_SCROLL_INSENSITIVE,
    ResultSet.CONCUR_READ_ONLY);
      

  10.   

    各位大下:用JDBC直接连接需要注意些什么呀?为什么我直接老是连接不上呢?我用的是:
    JDevelpoer+SQL server2000
      

  11.   

    上面dike103(dike)兄的代码如何?我觉得差不多!
      

  12.   

    szabo,你把你的代码贴出来,我们来分析分析吧,哈
      

  13.   

    dike103(dike)的代码有一点不好,就是没有使用游标,它每次先通过一条sql得到总记录数,这样会增加数据库的运算量,然后数据定位的时候居然用不断的next()方法!!!这得多慢呀!!要是要next()1000次,我就不太敢想象了,呵呵。不过他这种方法用在小项目上是没有问题的,而且还不需要数据库支持游标啦,比如access就不支持游标,就只能用这个方法了。
      

  14.   

    谢谢monbit(泼泼)兄说的如此明白,我研究一下allan1031(唐加西亚~米兰)的做法,我连数据库是用一个bean,是一个写好了的,每次调用就可以了,如果要套用allan1031(唐加西亚~米兰)的代码,哪些地方还要注意呢?(我的后台是oracle),谢谢了!
      

  15.   

    需要注意的我已经说过拉,但是最主要的是你用的数据库必须要支持游标,比如oracle数据库,呵呵,他的代码应该没什么问题的,你再试试调试一下应该就可以拉
      

  16.   

    上面的代码似乎都是在jsp里嵌入脚本,能不能用一个bean来实现
      

  17.   

    haimingway(haimingway)兄说的对,这样通用性有点差。
    我看到一篇文章,各位讨论一下,看大家谁用过,该如何用,文中提到的调用方法我不是很明白。
    转贴如下:
    在以列表的形式显示数据时需要对页面进行翻页控制,基本在项目的各模块中都会用到。为了最大限度地实现翻页的可重用和易移植,利用组件的形式对翻页逻辑进行封装。 
    翻页控制器的分析 描述: 翻页控制器用来实现对WEB页面的翻页内容的显示和翻页的各种操作的控制。通过JSP调用,将分页内容显示到WEB页面。它支持多种方式和风格的显示。 翻页控制器的设计 下面分别创建翻页控制器的一个PageConfig类、一个Page类、一个PageView类。 · PageConfig.java 类 
    类 PageConfig 
    声明 public class 
    描述 这个类用来保存页面属性的值,如每页显示几行等。 
    超类  
    执行  
    属性描述 
    属性 属性描述 定义 
    [PageConfig]   
    |--PAGE_SIZE 页大小 public static final int 
    |--PAGE_SIZE_SMALL 小型页面的大小 public static final int 
    |--PAGE_SIZE_NORMAL 正常页面的大小 public static final int 
    |--PAGE_SIZE_BIG 大型页面的大小 public static final int 
    |--PAGE_SIZE_BIGGER 较大页面的大小 public static final int 
    |--PAGE_SIZE_BIGGEST 最大页面的大小 public static final int 
    · Page.java 类 
    类 Page 
    声明 public class 
    描述 这个类用来保存页面属性的值,如每页显示几行等。 
    超类  
    执行 java.lang.Serializable 
    属性描述 
    属性 名称 属性描述 数据类型 
    |--EMPTY_PAGE 空白页面 描述一个空白页面,即不含内容的页面。 Page对象 
    |--objects 结果集列表 结果集列表 java.util.List或java.util.Vector 
    |--start 开始记录号 开始记录号,从0开始 正整数和0 
    |--end 结束记录号 结束记录号 正整数和0 
    |--viewStart 显示在页面开始记录号 显示在页面开始记录号,从1开始 正整数 
    |--viewEnd 显示在页面结束记录号 显示在页面结束记录号 正整数 
    |--hasPrevious 是否有上一页的开关 是否有上一页的开关 布尔值 
    |--previousPageNumber 上一页的页码 上一页的页码 正整数和0 
    |--hasNext 是否有下一页的开关 是否有下一页的开关 布尔值 
    |--nextPageNumber 下一页的页码 下一页的页码 正整数和0 
    |--total 总行数 一共有多少行记录 正整数和0 
    |--totalPage 总页数 一共有多少页  
    |--currentPageNumber 当前页 描述当前是第几页 正整数和0 
    |--pageSize 页大小 描述每页有多少行 正整数和0 
    构造器 
    构造器 构造器描述 参数 
    [Page]   
    |--Page(List l, int s, boolean hasNext) 创建页面 l 结果集s 开始记录号,从0开始hasNext 是否有下一页的开关 
    |--Page(List l, int s, boolean hasNext, int total) 创建页面 l 结果集s 开始记录号,从0开始hasNext 是否有下一页的开关total 一共有多少行记录 
    |--Page(List l, int s, int size, boolean hasNext, int total) 创建页面 l 结果集s 开始记录号,从0开始size 每页有多少行hasNext 是否有下一页的开关total 一共有多少行记录 
    |-- Page(List l, int num, int size, int total) 创建页面 l 结果集num 当前是第几页size 每页有多少行total 一共有多少行记录 
    |-- Page(List l) 创建页面,不进行分页 l 结果集 
    方法 
    方法 方法描述 返回值 
    [Page]   
    |--autoCalculate () 自动计算,根据当前页、页大小、总行数计算出其它属性的值 private void 
    |--getList() 获得结果集 public List 
    |--getViewStart() 获得显示在页面的开始记录号,从1开始 public int 
    |--getViewEnd() 获得显示在页面的结束记录号 public int 
    |--hasNextPage() 是否有下一页 public boolean 
    |--hasPreviousPage () 是否有上一页 public boolean 
    |--getPreviousPageNumber () 获得上一页的页码 public int 
    |--getNextPageNumber () 获得下一页的页码 public int 
    |--getTotal () 获得结果集中记录总行数 public int 
    |--getTotalPage () 获得总页数 public int 
    |--getCurrentPageNumber () 获得当前页码 public int 
    |--getPageSize () 获得每页多少行记录 public int 
    |--getStartOfNextPage () 获得下一页在结果集中开始的记录号,从0开始 public int 
    |--getStartOfPreviousPage () 获得上一页在结果集中开始的记录号,从0开始 public int 
    |--getSize() 获得当前页包括的记录行数 public int 
    |--isEmpty() 判断当前页面是否是空白页面,如果当前页面是空白页面,返回true,否则,返回false public boolean 
    PageView.java 类 
    类 PageView 
    声明 public class 
    描述 通过JSP调用,将分页内容显示到WEB页面。不支持图片、按钮等,只支持文字。用法:在JSP页面按如下形式定义:<% PageView view = new PageView(request,out,page); %>按缺省形式显示<% view.setVisible(true); %>按指定形式显示<% view.setVisible(true,0,1); %>  
    超类  
    执行  
    属性描述 
    属性 名称 属性描述 数据类型 
    [PageView]      
    |--currentUrl 当前页面的URL 当前页面的URL 字符串 
    |--style 风格 风格 字符串 
    |--useSquareBrackets 是否加[]的开关 在"上一页"两边是否加上"["和"]" 布尔值 
    |--page WEB页面 WEB页面 Page对象 
    构造器 
    构造器 构造器描述 参数 
    [PageView]   
    |-- PageView (HttpServletRequest request,JspWriter out,Page page)) 创建一个分页内容 request 客户端请求out 页面输出对象page WEB页面 
    方法 
    方法 方法描述 返回值 
    [PageView]     
    |--setVisible(boolean visible) 按缺省形式显示分页内容,如果visible为true,则显示分页内容,否则,不显示分页内容 public void 
    |--setVisible(boolean visible,int style,int order) 按指定形式显示分页内容,如果visible为true,则显示分页内容,否则,不显示分页内容 public void 
    |--setVisible(boolean visible,boolean useSquareBrackets,int style,int order) 按指定形式显示分页内容,如果visible为true,则显示分页内容,否则,不显示分页内容 public void 
    |--viewPage(boolean useSquareBrackets,int style,int order) 按指定形式显示分页内容,order为0,表示完整形式,按如下顺序显示:共计:18 分页:2 当前页:1 每页:10 首页 前页 后页 尾页 转到□□□□order为1,表示简洁形式,按如下顺序显示:前页 后页 尾页 1/2order为2,表示完整形式2,按如下顺序显示:共计:18 每页:10 转到□□□□ 首页 前页 后页 尾页 1/2 public void 
    翻页控制器的编码 只需按翻页控制器的设计进行编码,这里不用再讲了。 翻页控制器组件的源代码 a)PageConfig.java b)Page.java c)PageView.java 源代码:立即下载 翻页控制器的调用 翻页控制器的调用实在太简单了,调用方法: · 导入翻页控制器包 <%@ page import="java.util.List,com.cwap.oa.controller.web.page.Page,
    com.cwap.oa.controller.web.page.PageView"%>· 创建一个Page对象,Page.EMPTY_PAGE为空白页面 Page page = Page.EMPTY_PAGE;· 创建一个PageView对象 <% PageView view = new PageView(request,out,page); %>· 显示分页的内容: 按缺省形式显示 <% view.setVisible(true); %>按指定形式显示 <% view.setVisible(true,0,1); %>· 调用翻页控制器的例子 下面是在论坛板块中的一个JSP中调用的示例,用来显示所有的论坛板块列表,下面只列出部分代码: <%@ page language="java"%>
    <%@ page contentType="text/html; charset=GBK"%>
    <%@ page import="java.util.List, 
    com.cwap.oa.controller.web.page.PageView,com.cwap.oa.controller.web.page.Page"%>
    <jsp:useBean id="forumBoardHelper" scope="page" 
    class="com.club8090.forum.forumboard.client.ForumBoardClientHelper"/>
    <%
    String tmp=request.getParameter("pageNumber");
    int pageNumber = 0;
    if(tmp==null || tmp.equals("")){
    pageNumber = 1;
    }else{
    try {
     pageNumber = Integer.parseInt(tmp);
    }catch(java.lang.NullPointerException npe){
     pageNumber = 1;
    }catch(java.lang.NumberFormatException nfe){
     pageNumber = 1;
    }
    }
    Page page = Page.EMPTY_PAGE;//page初始化为Page.EMPTY_PAGE空白页面
    page = forumBoardHelper.getAllForumBoards(pageNumber);
    %>

    <table>
    <tr>
    <td>NO.</td>
    <td>名称</td>
    <td>描述摘要</td>
    </tr>
    <%
    List items = page.getList();
    if( items.isEmpty() ) {
    out.println("<tr colspan=3>没有记录存在</tr>");
    }else{
     int no;//页面中显示的行数
     for (int i = 0; i < items.size(); i++) {
       ForumBoardModel forumBoardModel = (ForumBoardModel)items.get(i);
        no = page.getViewStart() + i;
    %>
    //显示记录列表
    <tr>
    <td><%= no %></td>
    <td><%= forumBoardModel.getName() %></td>
    <td><%= forumBoardModel.getSummary() %></td>
    </tr>
    <%
     }
     PageView view = new PageView(request,out,page);
     view.setVisible(true,0,1);
    }
    %>
    </table>

      

  18.   

    你会php,asp等别的分页方法吗,会的话,应该很容易的啊,转化一下就可以了~
      

  19.   

    我的意思也是想要封装的通用一些,而且monbit(泼泼)兄提到的用游标的方法我觉得很好,资源利用合理,而且又保证了速度。
    我有上面提到的源码,你们可以看看,如何改进,而又容易使用!
    如何给你们,你们想个办法,一个一个的发邮件是不是有点慢了?
      

  20.   

    http://www.csdn.net/develop/Read_Article.asp?Id=15464
    http://www.csdn.net/develop/Read_Article.asp?Id=20368
    http://www.csdn.net/develop/Read_Article.asp?Id=18730
    http://www.csdn.net/develop/Read_Article.asp?Id=16268随便贴的自己研究把!
      

  21.   

    package util.db;import java.sql.*;
    import java.util.*;
    import sun.jdbc.rowset.CachedRowSet;/**
     *
     * <p>Title: </p>
     * <p>Description: </p>
     * <p>Copyright: Copyright (c) 2003</p>
     * <p>Company: </p>
     * @author not attributable
     * @version 1.0
     */
    public class PageBean { 
      private String tableName; //需要分页的数据库视图名称
      private int totalPage;
      private int curPage = 1;
      private int nextPage;
      private int perPage = 20; //默认为每页显示20条
      private int previousPage;
      private String index;
      private int firstPage;
      private int lastPage; //视图的索引字段
      public int getTotalPage() {
        return totalPage;
      }  public PageBean() {
      }  public void setCurPage(int curPage) {
        this.curPage = curPage;
      }  public int getCurPage() {
        return curPage;
      }  public int getNextPage() {
        if (getCurPage() == this.totalPage) {
          return this.totalPage; //到了最后面
        }
        else {
          return this.getCurPage() + 1;
        }
      }  public void setPerPage(int perPage) {
        this.perPage = perPage;
      }  public int getPerPage() {
        return perPage;
      }  public int getPreviousPage() {
        if (this.getCurPage() == 1) {
          return 1; //到了最前面
        }
        else {
          return this.getCurPage() - 1;
        }
      }  public String getTableName() {
        return tableName;
      }  public void inital() {
        int i = 0;
        try {
          DB mydb = new DB();
          String sql = "select count(*) from " + tableName;
          CachedRowSet rs = mydb.executeQuery(sql);
          System.out.println(sql);
          rs.next();
          if (rs.getInt(1) % this.getPerPage()==0){
            i=rs.getInt(1)/this.getPerPage();
          }
          else{
            i=rs.getInt(1)/this.getPerPage()+1;
          }
          this.totalPage = i;
          this.firstPage=1;
          this.lastPage=i;
        }
        catch (Exception e) {
          System.out.println(e.getMessage());
        }  }  public CachedRowSet getRecord() {
        CachedRowSet rs = null;
        DB mydb = new DB();
        try {
          int i = curPage - 1;
          String sql = "select * from " + tableName + " where rownum<=" +
              this.perPage + " and " + this.index + " not in (select " + this.index +
              " from " + tableName +
              " where rownum<=" + perPage + "*" + i + ")";
          System.out.println(sql);
          rs = mydb.executeQuery(sql);
        }
        catch (Exception e) {
          System.out.println(e.getMessage());
        }
        return rs;
      }  public static void main(String[] args) {
        PageBean mypage = new PageBean();    mypage.setIndex("directionId");
        mypage.setPerPage(2);
        mypage.setCurPage(1);
        mypage.setTableName("v_direction");
        mypage.inital();
        System.out.println("taltal page:" + mypage.getTotalPage());
        System.out.println("nextpage:" + mypage.getNextPage());
        System.out.println("prepage:" + mypage.getPreviousPage());
        CachedRowSet rs = mypage.getRecord();
        try {
          while (rs.next()) {
            System.out.println(rs.getString(1));
          }
        }
        catch (Exception e) {
          System.out.println(e.getMessage());
        }
      }  public String getIndex() {
        return index;
      }  public void setIndex(String index) {
        this.index = index;
      }  public void setTableName(String tableName) {
        this.tableName = tableName;
      }
      public int getFirstPage() {
        return firstPage;
      }
      public void setFirstPage(int firstPage) {
        this.firstPage = firstPage;
      }
      public int getLastPage() {
        return lastPage;
      }
      public void setLastPage(int lastPage) {
        this.lastPage = lastPage;
      }}
      

  22.   

    调用页面
    <!--
    分页bean的使用方法:
    首先设置:要分页的视图名称,设置当前页码,每页显示的数量,视图的索引字段
    然后调用其方法:inital()初始话,就可以了,如果不设置每页显示的数量,那么默认为每页显示20条
    -->
        <jsp:useBean id="mypage" class="util.db.PageBean"/>
        <jsp:setProperty name="mypage" property="tableName" value="courseTeacher"/>
        <jsp:setProperty name="mypage" property="curPage"/>
        <jsp:setProperty name="mypage" property="perPage" value="10"/>
        <jsp:setProperty name="mypage" property="index" value="teacherId"/>
        <%
        mypage.inital();
    CachedRowSet rs=mypage.getRecord();
    while(rs.next()){
    %>
        <tr class="back_color_2"> 
          <td  class=mode1> <div align="center"> <%=rs.getString("teacherId")%></div></td>
          <td class=mode2> <div align="center"><%=rs.getString("teacherName")%></a></div></td>
          <td  class=mode2> <div align="center"><%=rs.getString("schoolName")%></div></td>
          <td class=mode2><div align="center"> 
              <input name="button" type="button" class="cl2_ipt" value="查看" onClick="go('edit.jsp?teacherId=<%=rs.getString("teacherId")%>')">
            </div></td>
        </tr>
        <%}%>
      </table>
    <table width="630" border="0" cellspacing="0" cellpadding="0">
        <tr class="back_color_2"> 
          <td width="104" class="mode2">第 
            <jsp:getProperty name="mypage" property="curPage"/>
            页</td>
          <td width="119" class="mode2"> <a href="teacher_index.jsp?curPage=<jsp:getProperty name="mypage" property="firstPage"/>"> 
            <img src="../../images/cx_fy_sy.gif" width="13" height="13" border="0"></a><img src="../../images/blank.gif" width="8" height="8"> 
            <a href="teacher_index.jsp?curPage=<jsp:getProperty name="mypage" property="previousPage"/>"> 
            <img src="../../images/cx_fy_syy.gif" width="13" height="13" border="0"></a> 
            <img src="../../images/blank.gif"> <a href="teacher_index.jsp?curPage=<jsp:getProperty name="mypage" property="nextPage"/>"><img src="../../images/cx_fy_xyy.gif" border="0"></a> 
            <img src="../../images/blank.gif"> <a href="teacher_index.jsp?curPage=<jsp:getProperty name="mypage" property="lastPage"/>"><img src="../../images/cx_fy_wy.gif" width="13" height="13" border="0"></a> 
          </td>
          <td width="136" class="mode2"> 
            <%
      for(int i=mypage.getCurPage();i<=mypage.getTotalPage() && i<mypage.getCurPage()+5;i++){
        out.print("  <a href=teacher_index.jsp?curPage="+i+">["+i+"]</a>  ");
      }
      
      %>
          </td>
          <td width="78" class="mode2"></td>
          <td width="193" class="mode2">总共: 
            <jsp:getProperty name="mypage" property="totalPage"/></td>
        </tr>
      </table>
      

  23.   

    上面这个方法还是用rs.next()啊!效率如何呢?
      

  24.   

    allan1031(唐加西亚~米兰)兄:我改了相应的代码,运行结果如下所示,请问哪有问题啊?500 Servlet Exception
    Note: sun.tools.javac.Main has been deprecated.
    /loupan/4.jsp:71: Method last() not found in class java.lang.String.
    sqlRst.last(); 
               ^
    /loupan/4.jsp:73: Method getRow() not found in class java.lang.String.
    intRowCount = sqlRst.getRow(); 
                               ^
    /loupan/4.jsp:129: Method absolute(int) not found in class java.lang.String.
    sqlRst.absolute((intPage-1) * intPageSize + 1); 
                   ^
    /loupan/4.jsp:135: Method isAfterLast() not found in class java.lang.String.
    while(i<intPageSize && !sqlRst.isAfterLast()){ 
                                              ^
    /loupan/4.jsp:149: Method getString(int) not found in class java.lang.String.
          out.print((sqlRst.getString(2)));
                                     ^
    /loupan/4.jsp:151: Method getString(int) not found in class java.lang.String.
          out.print((sqlRst.getString(3)));
                                     ^
    /loupan/4.jsp:153: Method getString(int) not found in class java.lang.String.
          out.print((sqlRst.getString(4)));
                                     ^
    /loupan/4.jsp:155: Method getString(int) not found in class java.lang.String.
          out.print((sqlRst.getString(5)));
                                     ^
    /loupan/4.jsp:158: Method next() not found in class java.lang.String.
           sqlRst.next(); 
                      ^
    /loupan/4.jsp:184: Method close() not found in class java.lang.String.
    sqlRst.close(); 
                ^
    10 errors, 1 warning--------------------------------------------------------------------------------
    Resin 2.1.4 (built Fri Aug 2 14:16:52 PDT 2002)
      

  25.   

    这是我写的分页标记,全自动实现分页功能的参数获取和传送,并带有查询记忆恢复功能,使用只有三行标记,不能再简单了:
    毛遂自荐一个,欢迎批评指教。
    http://www.xdevelop.net/gb/main.jsp?catalogID=31经常有人问,数据库查询往哪里输入,我的分页只处理分页,不负责数据库,因为数据库查询因应用而异,我的标记只做分页份内的事,告诉你该从第几记录开始查了,该查多少条记录等,至于怎么查出来,这是你们自己实现的事了。分页最麻烦的是翻页时大量参数的传递,以及查询条件的传递,这个标记已经全部处理好了,不用你操心,只需按步就班的写三个标记即可。一个组件通常只解决一个问题,这是我设计组件的一个原则。
      

  26.   

    给个bean
    public ResultSet execQueryPage(String table,String field,String condition,int p)
          {
    String sql0=null;
            try{
             conn=DriverManager.getConnection(url,uid,pwd);
            Statement stmt=conn.createStatement();
         //start=(p-1)*pagesize;
             //sql0=sql+" limit "+start+", "+pagesize;
            sql0="select top "+pagesize+" "+field+" from "+table+" where "+condition+" and id not in (select top "+((p-1)*pagesize)+" id from "+table+" where "+condition+" order by id desc) order by id desc";
          rs=stmt.executeQuery(sql0);
          }      catch(SQLException ex)
          {
            System.err.println("mysqlbean.execQueryPage:"+ex.getMessage());
            System.err.println(sql0);
          }
    return rs;}
      

  27.   

    http://www.hnitline.com/bbs/dispbbs.asp?boardID=18&ID=807目前最好的分页技术思想确实很好,看看就知道了!
      

  28.   

    http://www.javaresearch.org/article/showarticle.jsp?column=106&thread=8893
    很不错的分页代码,肯定比上边的“目前最好的分页技术”强!
      

  29.   

    在新版本的JSPStudio中,通过向导,只要输入一个文件名和选择数据源,自动产生所有数据库操作和表格分页显示,下载地址:ftp://162.105.80.43/incoming/例如:输入文件名:TEST,并通过ODBC选择数据源,自动产生如下6个文件:
    TEST.java
    TESTAction.java
    TESTDAO.java
    TESTForm.java
    TEST.jsp
    TESTOut.jsp代码见:
    http://expert.csdn.net/Expert/topic/2228/2228055.xml?temp=.1732599