在開發過程中,經常做的一件事,也是最基本的事,就是從資料庫中查詢資料,然後在客戶端顯示出來。當資料少時,可以在乙個頁面內顯示完成。然而,如果查詢記錄是幾百條、上千條呢?直接乙個頁面顯示完全的話,**得多長啊。。。。。。這時,我們可以用分頁技術。
何為分頁?效果圖如下:
這裡總共查詢了100條記錄,如果一次性顯示的話**會很多行,使用者體驗不佳。而我們採用分頁顯示的話,一頁顯示10條記錄,共十頁。使用者可以自行翻閱,記錄少,清晰顯示。
下面談談分頁效果的實現,思路有三種:
其一:純js實現分頁。一次性查詢記錄並載入到html的table中。然後通過選擇性地顯示某些行來達到分頁顯示的目的。這是一種偽分頁,障眼法而已。只能用於資料少的情況下。一旦資料多了,十幾萬條資料載入到html中會變得很慢。而且不實時,一次載入完後資料就寫死在頁面了,若資料庫中有變化,瀏覽器端顯示的仍是上次載入過來的資料。
首先:用table來顯示查詢出來的記錄們,全部顯示。
複製**
<% string user_id, user_name, user_***, user_phone, user_age; while (sqlrst.next()) %>
<%=user_id%>
<%=user_name%>
<%=user_***%>
<%=user_phone%>
<%=user_age%>
複製**
然後,在js中修改table中某些行顯示,某些行隱藏。
複製**
複製**
其二:一次查詢,分批顯示。
複製**
<%
int intpagesize = 10; //一頁顯示的記錄數
int introwcount; //記錄總數
int intpagecount; //總頁數
string strpage; //從表單或url傳送的待顯示頁碼
int intpage; //待顯示頁碼 ,由strpage轉換成的整數
複製**
//—計算記錄總數的第一種方法:查詢出所有記錄,移動結果集指標到最後一條,獲取最後一條記錄的行號
//查詢所有資料
resultset sqlrst = sqlstmt.executequery(「select * from user」);
//獲取記錄總數
sqlrst.last(); //游標在最後一行
introwcount = sqlrst.getrow(); //獲得當前行號,即總記錄數
//記算總頁數
intpagecount = (int)math.ceil(introwcount/(intpagesize*1.0));
複製**
//將記錄指標定位到待顯示頁的第一條記錄上
sqlrst.absolute((intpage - 1) * intpagesize + 1);
//顯示資料
int i=0;
string user_id, user_name, user_***, user_phone, user_age;
while (i < intpagesize && !sqlrst.isafterlast())
%>
複製**
其三:在服務端分頁。跳到第n頁才查詢、顯示第n頁內容。要點就是根據客戶端**的「頁面」計算出資料庫要查詢的當前頁面的第一條記錄的位置。優點:實時性:跳頁才查詢。資料量小:只載入當前頁的記錄進行顯示。
重點在於兩條語句:select count(*) from ...:查詢得到記錄總條數
select * from .. limit pageno,rowscount:查詢從第pageno條開始的rowscount條資料。
複製**
int pages=0; //待顯示頁面
int count=0; //總條數
int totalpages=0; //總頁數
int limit=10; //每頁顯示記錄條數
//計算記錄總數的第二種辦法:使用mysql的聚集函式count()
resultset sqlrst = sqlstmt.executequery("select count() from user");
if(sqlrst.next())
//由記錄總數除以每頁記錄數得出總頁數
totalpages = (int)math.ceil(count/(limit1.0));
//獲取跳頁時傳進來的當前頁面引數
string strpage = request.getparameter(「pages」);
//判斷當前頁面引數的合法性並處理非法頁號(為空則顯示第一頁,小於0則顯示第一頁,大於總頁數則顯示最後一頁)
if (strpage == null) else catch(exception e)
if (pages < 1)
if (pages > totalpages)
}//由(pages-1)*limit算出當前頁面第一條記錄,由limit查詢limit條記錄。則得出當前頁面的記錄
sqlrst = sqlstmt.executequery("select * from user order by user_id limit " + (pages - 1) * limit + "," + limit);
while (sqlrst.next())
複製**
跳頁的實現:跳頁是通過重定向來實現的,通過向當前網頁傳進待顯示的pages,在跳轉後根據pages重新算出頁面顯示的第一條,查limit條顯示。
複製**
第<%=pages%>頁 共<%=totalpages%>頁 首頁
">最後一頁
轉到第:頁
複製**
附:常見資料庫分頁查詢語句
複製**
1.oracle資料庫分頁
select * from (select a.*,rownum rc from 表名 where rownum<=endrow) a where a.rc>=startrow
2.db2資料庫分頁
select * from (select rownumber() over() as rc,a.* from (select * from 表名 order by列名) as a) where rc between startrow and endrow
3.sql server 2000資料庫分頁
select top pagesize * from 表名 where 列名 not in(select top pagesize*page 列名 from 表名 order by列名) order by列名
4.sql server 2005資料庫分頁
select * from (select 列名,row_number() over(order by 列名1) as 別名from 表名) as t where t.列名1>=startrow and t.列名1<=endrow
5.mysql資料庫分頁
select * from 表名 limit startrow,pagesize
(pagesize為每頁顯示的記錄條數)
6.postgresql資料庫分頁
select * from 表名 limit pagesize,offset startrow
(pagesize為每頁顯示的記錄條數)
複製**
Web分頁顯示內容之分頁查詢的三種思路(三)
其三 在服務端分頁。跳到第n頁才查詢 顯示第n頁內容。要點就是根據客戶端 的 頁面 計算出資料庫要查詢的當前頁面的第一條記錄的位置。優點 實時性 跳頁才查詢。資料量小 只載入當前頁的記錄進行顯示。重點在於兩條語句 select count from 查詢得到記錄總條數 select from lim...
Oracle的三種分頁查詢
oracle的分頁一共有三種方式 1.根據rowid來分 select from t xiaoxi where rowid in select rid from select rownum rn,rid from select rowid rid,cid from t xiaoxi order by...
Oracle分頁查詢三種方式
1.根據rowid來分 select from t xiaoxi where rowid in select rid from select rownum rn,rid from select rowid rid,cid from t xiaoxi order by cid desc where r...