利用顛倒TOP分頁演算法實現分頁功能的思考(java 代碼實現)

來源:互聯網
上載者:User

一、選擇分頁演算法

下面是顛倒TOP分頁演算法

 

pagesize: 每頁顯示記錄數
cureentpage:當前頁數

select * from (   select TOP pagesize * FROM ( SELECT TOP pagesize*cureentpage   * from news ORDER BY addtime DESC ) as a   ORDER BY addtime ASC ) as b   ORDER BY addtime DESC

 

這樣就可以把每頁的資料返回,加上索引可以提高查詢效率

 

select count(*) from news

 

返回總記錄數

 

二、程式設計

Page.java

  1. package com.test.util
  2. public class Page(){
  3.   private int pagesize;//一頁的記錄數
  4.   private int currentpage;//當前頁
  5.   private int rowcount;//總記錄數
  6.   private int pagecount;//計算的總頁數
  7.   
  8.   //變數初始化
  9.   public Page(int currentpage, int rowcount){
  10.      pagesize = 10;
  11.      pagecount = rowcount/pagesize + 1;//計算總頁數
  12.      this.currentpage = currentpage;
  13.      this.rowcount = rowcount;
  14.   }
  15.   
  16.   //返回總記錄
  17.   public int getPageCount(){   
  18.      return pagecount;
  19.   }
  20.  //返回每頁的記錄數
  21.   public int getPageSize(){   
  22.      return pagesize;
  23.   }
  24.   
  25.   //返回判斷狀態,如果第一頁,返回0,最後一頁返回1,如果平常頁返回2
  26.   public int checkCurrent(){
  27.      if(current == 1){
  28.         return 0;
  29.      }
  30.      if(current == pagecount){
  31.         return 1;
  32.      }
  33.      else{
  34.         return 2;
  35.      }
  36.   }
  37. }

action中的調用

int currentpage = Integer.parseInt(request.getParameter("page"));

 

String sql = "select count(*) from news";

ResultSet rs =  stms.executeQuery(sql);

rs.next();

int rowcount = rs.getInt(1);

rs.close();

 

Page p = new Page(currentpage,rowcount);

int pagecount = p.getPageCount();

int flag = p.checkCurrent();

int pagesize = p.getPageSize();

ResultSet rs1 = null;

if(flag == 0){

sql = "select top "+pagesize +" * from news order by addtime DESC";

rs1 =  stms.executeQuery(sql);

....................

}

if(flag == 1){

int pagelast = rowcount - ((pagecount - 1) * pagesize);

sql = "select * from (select top "+pagelast +"  * from news order by addtime ASC) as a order by addtime DESC";

rs1 =  stms.executeQuery(sql);

....................

}

else{

int pagelast = rowcount - ((pagecount - 1) * pagesize);

sql = "select * from (   select TOP pagesize * FROM ( SELECT TOP pagesize*cureentpage   * from news ORDER BY addtime DESC ) as a   ORDER BY addtime ASC ) as b   ORDER BY addtime DESC";

rs1 =  stms.executeQuery(sql);

....................

}

.....................

 

 

 

 

以上是我對使用顛倒TOP法實現的分頁功能,十分簡單

在效率上,支援200萬條資料應該沒有問題

 

 

PS:如果把SQL查詢運用到預存程序中,會不會更有效率呢?

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.