在開發過程中,經常做的一件事,也是最基本的事,就是從資料庫中查詢資料,然後在客戶端顯示出來。當資料少時,可以在乙個頁面內顯示完成。然而,如果查詢記錄是幾百條、上千條呢?直接乙個頁面顯示完全的話,**得多長啊。。。。。。這時,我們可以用分頁技術。
何為分頁?效果圖如下:
這裡總共查詢了100條記錄,如果一次性顯示的話**會很多行,使用者體驗不佳。而我們採用分頁顯示的話,一頁顯示10條記錄,共十頁。使用者可以自行翻閱,記錄少,清晰顯示。
下面談談分頁效果的實現,思路有三種:
其一:純js實現分頁。一次性查詢記錄並載入到html的table中。然後通過選擇性地顯示某些行來達到分頁顯示的目的。這是一種偽分頁,障眼法而已。只能用於資料少的情況下。一旦資料多了,十幾萬條資料載入到html中會變得很慢。而且不實時,一次載入完後資料就寫死在頁面了,若資料庫中有變化,瀏覽器端顯示的仍是上次載入過來的資料。
首先:用table來顯示查詢出來的記錄們,全部顯示。
string user_id, user_name, user_***, user_phone, user_age;然後,在js中修改table中某些行顯示,某些行隱藏。 其二:一次查詢,分批顯示。while (sqlrst.next())
%>
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));
//將記錄指標定位到待顯示頁的第一條記錄上其三:在服務端分頁。跳到第n頁才查詢、顯示第n頁內容。要點就是根據客戶端**的「頁面」計算出資料庫要查詢的當前頁面的第一條記錄的位置。優點:實時性:跳頁才查詢。資料量小:只載入當前頁的記錄進行顯示。sqlrst.absolute((intpage - 1) * intpagesize + 1);
//顯示資料
int i=0;
string user_id, user_name, user_***, user_phone, user_age;
while (i < intpagesize && !sqlrst.isafterlast())
%>
重點在於兩條語句:select count(*) from ...:查詢得到記錄總條數
select * from .. limit pageno,rowscount:查詢從第pageno條開始的rowscount條資料。
int pages=0; //待顯示頁面跳頁的實現:跳頁是通過重定向來實現的,通過向當前網頁傳進待顯示的pages,在跳轉後根據pages重新算出頁面顯示的第一條,查limit條顯示。 附:常見資料庫分頁查詢語句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/(limit*1.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())
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網頁 頁面布局的幾種方式
網頁基本布局方式 1 流式布局 fluid 流布局與固定寬度布局基本不同點 就在於對 尺寸的側量單位不同。固定寬度布局使用的是畫素,但是流布局使用的是百分比,這位網頁提供了很強的可塑性和流動性。換句話說,通過設定百分比,我們不需要考慮裝置尺寸或者螢幕寬度大小了,可以為每種情形找到一種可行的方案,應為...
web網頁 頁面布局的幾種方式
流布局使用的是百分比,這位網頁提供了很強的可塑性和流動性。通過設定百分比,我們不需要考慮裝置尺寸或者螢幕寬度大小了,可以為每種情形找到一種可行的方案,應為你的設計尺寸將適應所有的裝置尺寸。流布局與 查詢和優化樣式技術密切相關。在固定布局中,網頁的寬度是必須指定為乙個畫素值,一般為960px。因為96...
web網頁 頁面布局的幾種方式
網頁基本布局方式 1 流式布局 fluid 流布局與固定寬度布局基本不同點 就在於對 尺寸的側量單位不同。固定寬度布局使用的是畫素,但是流布局使用的是百分比,這位網頁提供了很強的可塑性和流動性。換句話說,通過設定百分比,我們不需要考慮裝置尺寸或者螢幕寬度大小了,可以為每種情形找到一種可行的方案,應為...