程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> JSP編程 >> 關於JSP >> 目前最好的JSP分頁技術

目前最好的JSP分頁技術

編輯:關於JSP

前言
     在使用數據庫的過程中,不可避免的需要使用到分頁的功能,可是JDBC的規范對此卻沒有很好的解決。對於這個需求很多朋友都有自己的解決方案,比如使用Vector等集合類先保存取出的數據再分頁。但這種方法的可用性很差,與JDBC本身的接口完全不同,對不同類型的字段的支持也不好。這裡提供了一種與JDBC兼容性非常好的方案。
 JDBC和分頁
  Sun的JDBC規范的制定,有時很讓人哭笑不得,在JDBC1.0中,對於一個結果集(ResultSet)你甚至只能執行next()操作,而無法讓其向後滾動,這就直接導致在只執行一次SQL查詢的情況下無法獲得結果集的大小。所以,如果你使用的是JDBC1.0的驅動,那麼是幾乎無法實現分頁的。
  好在Sun的JDBC2規范中很好的彌補了這一個不足,增加了結果集的前後滾動操作,雖然仍然不能直接支持分頁,但我們已經可以在這個基礎上寫出自己的可支持分頁的ResultSet了。
 和具體數據庫相關的實現方法
  有一些數據庫,如Mysql, Oracle等有自己的分頁方法,比如Mysql可以使用limit子句,Oracle可以使用ROWNUM來限制結果集的大小和起始位置。這裡以Mysql為例,其典型代碼如下:
    // 計算總的記錄條數
    String SQL = "SELECT Count(*) AS total " + this.QueryPart;
    rs = db.executeQuery(SQL);
    if (rs.next())
    Total = rs.getInt(1);
    // 設置當前頁數和總頁數
    TPages = (int)Math.ceil((double)this.Total/this.MaxLine);
    CPages = (int)Math.floor((double)Offset/this.MaxLine+1);
    // 根據條件判斷,取出所需記錄
    if (Total > 0) {
      SQL = Query + " LIMIT " + Offset + " , " + MaxLine;
      rs = db.executeQuery(SQL);
    }
    return rs;
  }
  毫無疑問,這段代碼在數據庫是Mysql時將會是漂亮的,但是作為一個通用的類(事實上我後面要提供的就是一個通用類庫中的一部分),需要適應不同的數據庫,而基於這個類(庫)的應用,也可能使用不同的數據庫,所以,我們將不使用這種方法。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved