無線&移動互聯網技術研發
換位思考·····
posts - 19, comments - 53, trackbacks - 0, articles - 283
BlogJava
::
首頁
::
新隨筆
::
聯系
::
聚合
::
管理
分頁(老式分頁--wap項目的啟迪)
Posted on 2009-05-21 22:05
Gavin.lee
閱讀(440)
評論(0)
編輯
收藏
所屬分類:
web 積累(前端 + 后臺)
分頁技術在web開發中是不可忽略的,也是非常重要的。其實傳統分頁跟新式分頁還是各分千秋的,不能說老的不好,新的就好,要具體對待具體的項目。從網上看到某人的一段話,非常有效,相信這位仁兄也是經驗之談了:
“第一種方法是用select語句查詢出所有的數據,再通過移動當前記錄指針到當前頁面需要顯示的數據記錄位置,再作顯示。優點是程序比較簡單,由于查詢出來的結果較大,網絡開銷也較大。
第二種方法是先用一條select語句得到SQL查詢的記錄條數,因為數據庫存執行"select count(*)"運算的速度是很快的,返回的數據集也僅一條記錄,此開銷可忽略不記。得到總記錄數后,再計算出當前頁面要顯示的數據的SQL查詢結果的起始位置和結束位置,再用SQL語句查詢出當前頁的數據。這種方法編寫的程序的量相對較多,得到的數據量也相對較小,運行效率比第一種高,但并不能從根本上優化數據庫的SQL查詢,也不能從根本上解決網絡開銷大的問題。
第三種方法是使用存儲過程。存儲過程在數據庫中會作預編譯處理,所以執行速度較快。在JSP頁面中要設定每頁記錄條數、當前的頁碼等參數,再將這些參數在調用存儲過程時傳入到存儲過程中,由存儲過程執行后得到指定頁指定數目的記錄數。這種方法優點燭效率最高,網絡開銷小,缺點不是程序員需要編寫較多的程序,針對每個查詢要編寫不同的存儲過程。”
三種分頁我也都有用到過,我的一點感受:第一,三種方案對java程序設計師非常簡單的。首先推翻一種說法,網上很多網友都說什么緩存數據查詢結果集。乍一想很不過的想法。仔細一想,怎么可能。每當在數據庫連接關閉時(PareparedStatement,Connection關閉),ResultSet 也都關閉了。看看下面的圖就知道了:
分頁一:
我是這樣做的,首先我得到結果集(在我的項目里,結果集是解析xml而來的),然后都放到list中,傳到view層(JSP),將這個list保存在HeepSession中。每次查詢分頁都是在這個list里截取。在數據量很小的情況下,這個還是非常方便的。只需要讀取一次xml(一般連接DB的時候也只要連接一次)。同時缺點也是非常明顯的:1.當這個結果集很大的時候無疑是非常耗內存的,效率也大減;2.實時性也很差,開始就將數據封裝在list里了,得不到即時更新。
我在wap項目中的具體實現,wap用法很簡單:
注:為了方便我個人,有些無用信息我也不刪除了,如果有讀者看到,無用信息就忽略了吧。還有這里的list是我從后層解析xml封裝的Listprize 集合。
JSP:
<%
request.setCharacterEncoding(
"
UTF-8
"
);
String lotid
=
request.getParameter(
"
lotid
"
);
String name
=
request.getParameter(
"
name
"
);
String pages
=
request.getParameter(
"
pages
"
);
int
pageI
=
Integer.parseInt(pages);
String cpname
=
""
;
if
(lotid.equals(
"
7
"
))
{
cpname
=
"
福彩3D
"
;
}
else
if
(lotid.equals(
"
28
"
))
{
cpname
=
"
大樂透
"
;
}
else
if
(lotid.equals(
"
8
"
))
{
cpname
=
"
22選5
"
;
}
else
if
(lotid.equals(
"
20
"
))
{
cpname
=
"
29選7
"
;
}
else
if
(lotid.equals(
"
5
"
))
{
cpname
=
"
數字排列
"
;
}
else
if
(lotid.equals(
"
11
"
))
{
cpname
=
"
七樂彩
"
;
}
else
if
(lotid.equals(
"
4
"
))
{
cpname
=
"
七星彩
"
;
}
else
if
(lotid.equals(
"
26
"
))
{
cpname
=
"
36選7
"
;
}
else
if
(lotid.equals(
"
12
"
))
{
cpname
=
"
時時樂
"
;
}
else
if
(lotid.equals(
"
3
"
))
{
cpname
=
"
雙色球
"
;
}
else
if
(lotid.equals(
"
21
"
))
{
cpname
=
"
15選5
"
;
}
else
if
(lotid.equals(
"
1
"
))
{
cpname
=
"
勝負彩
"
;
}
else
if
(lotid.equals(
"
15
"
))
{
cpname
=
"
半全場
"
;
}
else
if
(lotid.equals(
"
17
"
))
{
cpname
=
"
進球彩
"
;
}
else
if
(lotid.equals(
"
29
"
))
{
cpname
=
"
時時彩
"
;
}
out.write(cpname
+
"
最新一期用戶中獎信息<br/>
"
);
//
第一次訪問排行榜的時候,初始化排行榜list,并將其放入session,供下次分頁。
if
(pageI
==
1
)
{
List
<
Listprize
>
list
=
prize.getPrize(lotid, name);
session.setAttribute(
"
list
"
, list);
}
List
<
Listprize
>
listPrize
=
(List
<
Listprize
>
)session.getAttribute(
"
list
"
);
int
allpage
=
listPrize.size()
/
10
+
(listPrize.size()
%
10
==
0
?
0
:
1
);
int
allRec
=
listPrize.size();
int
pagesize
=
10
;
out.write(
"
共
"
+
allRec
+
"
位中獎,第
"
+
pageI
+
"
/
"
+
allpage
+
"
頁<br/>
"
);
if
(allRec
<=
pagesize)
{
for
(Listprize l: listPrize)
{
out.write(
"
[
"
+
cpname
+
"
]
"
+
l.getUsername()
+
"
喜中
"
+
l.getGetMoney()
+
"
<br/>
"
);
}
}
else
{
if
(pageI
==
allpage)
{
for
(
int
i
=
(pageI
-
1
)
*
pagesize; i
<
allRec; i
++
)
{
Listprize prizeObject
=
listPrize.get(i);
out.write(
"
[
"
+
cpname
+
"
]
"
+
prizeObject.getUsername()
+
"
喜中
"
+
prizeObject.getGetMoney()
+
"
<br/>
"
);
}
out.write(
"
<anchor><go href='newaward.jsp'>上一頁<postfield name='lotid' value='
"
+
lotid
+
"
'/><postfield name='name' value='
"
+
name
+
"
'/><postfield name='pages' value='
"
+
(pageI
-
1
)
+
"
'/></go></anchor><br/>
"
);
}
else
{
for
(
int
i
=
(pageI
-
1
)
*
pagesize; i
<
pageI
*
pagesize; i
++
)
{
Listprize prizeObject
=
listPrize.get(i);
out.write(
"
[
"
+
cpname
+
"
]
"
+
prizeObject.getUsername()
+
"
喜中
"
+
prizeObject.getGetMoney()
+
"
<br/>
"
);
}
if
(pageI
>
1
)
{
out.write(
"
<anchor><go href='newaward.jsp'>上一頁<postfield name='lotid' value='
"
+
lotid
+
"
'/><postfield name='name' value='
"
+
name
+
"
'/><postfield name='pages' value='
"
+
(pageI
-
1
)
+
"
'/></go></anchor>
"
);
}
out.write(
"
<anchor><go href='newaward.jsp'>下一頁<postfield name='lotid' value='
"
+
lotid
+
"
'/><postfield name='name' value='
"
+
name
+
"
'/><postfield name='pages' value='
"
+
(pageI
+
1
)
+
"
'/></go></anchor><br/>
"
);
}
}
%>
新用戶注冊
刷新評論列表
只有注冊用戶
登錄
后才能發表評論。
網站導航:
博客園
IT新聞
Chat2DB
C++博客
博問
管理
相關文章:
org.hibernate.hql.antlr.HqlBaseParser.recover(NoSuchMethodError)
使用Appfuse快速構建J2EE應用
大型門戶網站的十四大技術!!!
Urlrewrite與Struts2.x結合使用
HttpWatch的檢測指示說明:Blocked、Connect、Send、Wait、Receive
SOA (Service-Oriented Architecture)的服務接口設計最佳實踐
HTTP && HTTPS
優良、高效的web service 接口
TCP/IP 基礎介紹
access.log日志分析 --PV等
Powered by:
BlogJava
Copyright © Gavin.lee
日歷
<
2025年5月
>
日
一
二
三
四
五
六
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
常用鏈接
我的隨筆
我的文章
我的評論
我的參與
最新評論
留言簿
(13)
給我留言
查看公開留言
查看私人留言
我參與的團隊
深圳Java俱樂部(0/0)
隨筆檔案
(19)
2011年6月 (1)
2011年5月 (1)
2010年12月 (1)
2010年5月 (1)
2010年1月 (1)
2009年8月 (2)
2009年6月 (6)
2009年5月 (6)
文章分類
(277)
Date tools(4)
FreeMarker (7)
java design pattern(3)
java SE & EE(60)
JDBC(14)
jsp 【勿忘】(5)
Linux command(7)
Linux shell 入門(11)
Linux 日常應用(5)
Log && File Operate(8)
MemCache (5)
SiteMesh 頁面裝飾組件(2)
SSH2 --Hibernate(6)
SSH2 --Spring(9)
SSH2 --Struts2(21)
Subversion(Svn)(5)
wap 積累(8)
web 積累(前端 + 后臺)(33)
xml doc 操作(12)
多線程(6)
性能分析(7)
類的設計(4)
經典語錄(3)
經驗&常識(32)
文章檔案
(282)
2011年7月 (1)
2011年6月 (1)
2011年5月 (1)
2011年4月 (1)
2011年3月 (1)
2011年2月 (1)
2010年12月 (6)
2010年11月 (8)
2010年10月 (1)
2010年9月 (6)
2010年6月 (7)
2010年5月 (22)
2010年4月 (1)
2010年3月 (14)
2010年2月 (2)
2010年1月 (10)
2009年12月 (32)
2009年11月 (30)
2009年10月 (2)
2009年9月 (5)
2009年8月 (13)
2009年7月 (41)
2009年6月 (43)
2009年5月 (33)
收藏夾
(7)
java 基礎類(1)
JSP(1)
server(2)
WEB(1)
數據庫
設計模式(2)
友情鏈接
blogjava中的強人
chinaunix 社區
java 世紀網
java 基礎輔導文章
javaeye 藍色的風
SQL語句教程
與java共舞
中國協議分析網
中文java技術網
多線程
待看的文章
感興趣的 csdn
我的漫漫程序之旅
新起點,新開始
夢幻之旅
趙學慶 的博客
超級多文章的牛人
隔葉黃鶯 The Blog of Unmi
高手論壇
最新隨筆
1.?Mysql:1292 truncated incorrect double value -- concat 函數用法
2.?Mysql 插入當前時間【摘】
3.?學計算機的你傷不起啊【雷人】
4.?ucweb和opera工作原理的差別【摘】
5.?清朝皇帝列表
6.?設置IE查看源文件時默認打開的編輯器【轉】
7.?subclipse svn修改用戶名密碼問題【摘】
8.?hibernate.dialect (Hibernate SQL方言)-備用
9.?Tomcat JspFactory的異常的原因及解決辦法
10.?關于MyEclipse中的Tomcat啟動的問題 【Tomcat JDK name error】
11.?win-xp 自動關機腳本 【古老的記憶】
12.?Office 2007 Word 打開故障 - "The setup controller has encountered a problem during instll"
13.?木匠家的門
14.?MyEclipse 后臺進程一直運行"computing additional info"的解決辦法
15.?MyEclipse 一直 initializing java tooling······
16.?MyEclipse 代碼提示(“@”自動提示)
17.?org.hibernate.hql.ast.QuerySyntaxException(我的流水賬)
18.?org.hibernate.hql.antlr.HqlBaseParser.recover(NoSuchMethodError)
19.?SVN:cannot map the project with svn provider解決辦法
20.?WAP1.0 前端開發經驗(原創-JSP)
21.?Notepad++提示"Load langs.xml failed!"的解決方法
22.?讓你的PC也能訪問手機騰訊網
23.?【轉】Proxool 連接池的配置-hibernate篇
24.?Hibernate 主鍵生成策略
25.?Quartz cron 表達式格式的含義
26.?OGNL功用!!!
27.?使用Appfuse快速構建J2EE應用
28.?大型門戶網站的十四大技術!!!
29.?Urlrewrite與Struts2.x結合使用
30.?HttpWatch的檢測指示說明:Blocked、Connect、Send、Wait、Receive
31.?解讀JAR,SIS,SISX格式區別!!!
32.?commons-lang-2.4.jar 包常用方法集錦
33.?Struts2中解決一個表單多種提交
34.?JSTL(Java Standard Tag Library) 標記庫的使用
35.?Struts2驗證錯誤信息的兩個經典方法-addFieldError&addActionError
36.?Hibernate常見異常-無法轉換為內部表示
37.?Spring AOP詳細導讀-用多手段實例對比呈現AOP
38.?Struts2 Result-type(封裝Action層到View層的跳轉邏輯)
39.?在Struts2中以IOC和非IOC方式獲取session&request
40.?采用url鏈接形式提交action(非s:from方式提交)
搜索
積分與排名
積分 - 356200
排名 - 156
最新評論
1.?re: Struts2驗證錯誤信息的兩個經典方法-addFieldError&addActionError
S2C4
--asdad
2.?re: Struts2驗證錯誤信息的兩個經典方法-addFieldError&addActionError[未登錄]
asd
--as
3.?21232.2323
323432432
--馮海波
4.?re: SVN:cannot map the project with svn provider解決辦法[未登錄]
多謝!已經解決。
--will
5.?re: Struts2驗證錯誤信息的兩個經典方法-addFieldError&addActionError
44
--2
閱讀排行榜
1.?學計算機的你傷不起啊【雷人】(1020)
2.?看看這個笑話,你就知道干IT的不容易了!!(623)
3.?清朝皇帝列表(616)
4.? 每天讀一遍,不久你就會變! ---- 很好很強大(469)
5.?木匠家的門(423)
評論排行榜
1.?學計算機的你傷不起啊【雷人】(0)
2.?清朝皇帝列表(0)
3.?木匠家的門(0)
4.? 每天讀一遍,不久你就會變! ---- 很好很強大(0)
5.?我喜歡的語錄(0)
主站蜘蛛池模板:
亚洲夜夜欢A∨一区二区三区
|
亚洲毛片av日韩av无码
|
亚洲视频精品在线观看
|
男女午夜24式免费视频
|
污污网站18禁在线永久免费观看
|
亚洲午夜精品一级在线播放放
|
在线观看免费人成视频色9
|
亚洲一区二区三区无码国产
|
美女视频黄是免费的网址
|
亚洲性色AV日韩在线观看
|
国产免费拔擦拔擦8x
|
无套内射无矿码免费看黄
|
亚洲综合区小说区激情区
|
国产一级高青免费
|
一区二区三区亚洲
|
亚洲AV无码久久寂寞少妇
|
色猫咪免费人成网站在线观看
|
亚洲成人高清在线观看
|
成人在线免费观看
|
日韩精品无码免费视频
|
亚洲精品少妇30p
|
国产成人免费在线
|
99亚洲乱人伦aⅴ精品
|
久久精品国产精品亚洲下载
|
亚洲一区免费观看
|
亚洲偷自拍另类图片二区
|
亚洲第一福利网站在线观看
|
七色永久性tv网站免费看
|
亚洲高清中文字幕免费
|
亚洲AV无码之日韩精品
|
无码av免费一区二区三区
|
欧洲亚洲国产精华液
|
亚洲精品无码鲁网中文电影
|
免费精品国产自产拍在线观看图片
|
亚洲AV无码专区在线观看成人
|
中文亚洲AV片不卡在线观看
|
色影音免费色资源
|
av午夜福利一片免费看久久
|
亚洲午夜电影在线观看高清
|
亚洲午夜日韩高清一区
|
免费A级毛片无码免费视
|