資源描述:
《JSP與javabean與jdbc的綜合應(yīng)用.ppt》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、JSP與Javabean綜合應(yīng)用目標(biāo)掌握實(shí)例應(yīng)用:數(shù)據(jù)庫分頁技術(shù)的實(shí)現(xiàn)項(xiàng)目實(shí)踐體驗(yàn)項(xiàng)目——<網(wǎng)絡(luò)通訊錄>本章我們要制作一個(gè)網(wǎng)絡(luò)通訊錄,本項(xiàng)目有五個(gè)模塊組成,分別是顯示成員、添加成員、修改成員、刪除成員和新用戶注冊(cè)。實(shí)現(xiàn)數(shù)據(jù)庫查詢分頁一般有以下幾種方式:使用HttpSession或有狀態(tài)bean實(shí)現(xiàn)緩存使用Vector實(shí)現(xiàn)緩存使用ResultSet實(shí)現(xiàn)緩存使用數(shù)據(jù)庫自身的功能實(shí)現(xiàn)Oracle,MySql數(shù)據(jù)庫應(yīng)用--分頁實(shí)現(xiàn)使用HttpSession實(shí)現(xiàn)分頁將查詢結(jié)果緩存在HttpSession或有狀態(tài)bean中,翻頁的時(shí)候從緩存中取出一頁數(shù)據(jù)顯示。兩個(gè)主要的缺點(diǎn):用
2、戶可能看到的是過期數(shù)據(jù);如果數(shù)據(jù)量非常大時(shí)第一次查詢遍歷結(jié)果集會(huì)耗費(fèi)很長時(shí)間,并且緩存的數(shù)據(jù)也會(huì)占用大量內(nèi)存,效率明顯下降。數(shù)據(jù)庫應(yīng)用--分頁實(shí)現(xiàn)使用Vector實(shí)現(xiàn)緩存先將所有記錄都select出來,然后將ResultSet中的數(shù)據(jù)都get出來,存入Vector等集合類中,再根據(jù)所需分頁的大小,頁數(shù),定位到相應(yīng)的位置,讀取數(shù)據(jù)缺點(diǎn)代碼的效率不高程序結(jié)構(gòu)和使用的方便性上很糟糕的。比如,這種做法支持的字段類型有限,int,double,String類型還比較好處理,如果碰到Blob,Text等類型,實(shí)現(xiàn)起來就很麻煩了數(shù)據(jù)庫應(yīng)用--分頁實(shí)現(xiàn)使用ResultSet實(shí)現(xiàn)緩存
3、每次翻頁都查詢一次數(shù)據(jù)庫,從ResultSet中只取出一頁數(shù)據(jù)該結(jié)果集中的指針可以隨意移動(dòng)實(shí)現(xiàn)分頁需要的參數(shù)intintPageSize;//一頁顯示的記錄數(shù)intintRowCount;//記錄總數(shù)intintPageCount;//總頁數(shù)intintPage;//待顯示頁碼數(shù)據(jù)庫應(yīng)用--分頁實(shí)現(xiàn)總的紀(jì)錄數(shù):sqlRst.last();//光標(biāo)在最后一行intRowCount=sqlRst.getRow();//獲得當(dāng)前行號(hào)記算總頁數(shù)intPageCount=(int)Math.ceil((float)intRowCount/(float)intPageSize)
4、;為了防止除法結(jié)果為小數(shù)的情況,先將總頁碼和每頁顯示的紀(jì)錄數(shù)都轉(zhuǎn)化為小數(shù)形式,那么除的結(jié)果也為小數(shù)。通過Math.ceil(float)方法將該小數(shù)轉(zhuǎn)化為大于等于該小數(shù)的最小整數(shù),這個(gè)就是最終的總頁數(shù)。數(shù)據(jù)庫應(yīng)用--分頁實(shí)現(xiàn)數(shù)據(jù)庫應(yīng)用--分頁實(shí)現(xiàn)定位即將顯示的頁碼中第一個(gè)紀(jì)錄位置:sqlRst.absolute((intPage-1)*intPageSize+1);通過絕對(duì)定位來制定結(jié)果集中指針的位置結(jié)果集中的指針下標(biāo)從1開始每頁顯示4條紀(jì)錄intPageSize=4要顯示的頁碼該頁第一條紀(jì)錄下標(biāo)該頁最后一條記錄的下表計(jì)算公式114(1-1)*4+1=1258(2-
5、1)*4+1=53912(3-1)*4+1=9ingPage(intPage-1)*intPageSize+1實(shí)現(xiàn)步驟:根據(jù)條件查詢所有的紀(jì)錄使用rs.last()將指針移到最后一行,并應(yīng)rs.getRow()獲得總計(jì)錄條數(shù)根據(jù)計(jì)算得到總的頁數(shù)對(duì)于每頁的顯示再使用rs.absolute()定位到本頁起始記錄使用rs.next()和每頁顯示的紀(jì)錄條數(shù)來具體的顯示紀(jì)錄例子:Pagination.jsp數(shù)據(jù)庫應(yīng)用--分頁實(shí)現(xiàn)缺點(diǎn):這種方式在某些數(shù)據(jù)庫(如oracle)的JDBC實(shí)現(xiàn)中差不多也是需要遍歷所有記錄,實(shí)驗(yàn)證明在記錄數(shù)很大時(shí)速度非常慢。重用性不好改進(jìn)方法:將在JS
6、P中實(shí)現(xiàn)的數(shù)據(jù)庫連接方法放到j(luò)avabean中去實(shí)現(xiàn),這樣可實(shí)現(xiàn)代碼的重用。數(shù)據(jù)庫應(yīng)用--分頁實(shí)現(xiàn)例子:PageableBean.jsp看過上面三種實(shí)現(xiàn)方法后,對(duì)新的分頁機(jī)制有了一個(gè)目標(biāo),不與具體數(shù)據(jù)庫相關(guān);盡可能做到代碼重用;盡可能與原JDBC接口的使用方法保持一致;盡可能高的效率。數(shù)據(jù)庫應(yīng)用--分頁實(shí)現(xiàn)體驗(yàn)項(xiàng)目——<網(wǎng)絡(luò)通訊錄>本章我們要制作一個(gè)網(wǎng)絡(luò)通訊錄,本項(xiàng)目有五個(gè)模塊組成,分別是顯示成員、添加成員、修改成員、刪除成員和新用戶注冊(cè)。整體設(shè)計(jì)首先我們分析一下這個(gè)網(wǎng)絡(luò)通訊錄需要哪些功能:1.用戶登錄頁,實(shí)現(xiàn)用戶的登錄功能。2.顯示與登錄用戶相對(duì)應(yīng)的通訊記錄頁面。
7、3.實(shí)現(xiàn)向通訊錄中添加信息的功能。4.實(shí)現(xiàn)修改信息的功能。5.實(shí)現(xiàn)刪除通訊錄中的信息的功能。6.提供新用戶注冊(cè)的功能。通過以上分析我們可以大致分析出通訊錄需要實(shí)現(xiàn)的功能,以及頁面的整體結(jié)構(gòu)。數(shù)據(jù)庫設(shè)計(jì)通過以上對(duì)通訊錄功能的描述可以分析出數(shù)據(jù)庫至少需要兩個(gè)表來保存信息,其中一個(gè)保存用戶信息,這個(gè)表起名為“users”。另一個(gè)表命名為“address”,用于保存用戶添加的通訊信息。總結(jié)掌握實(shí)例應(yīng)用:數(shù)據(jù)庫分頁技術(shù)的實(shí)現(xiàn)項(xiàng)目實(shí)踐理論作業(yè)1、實(shí)現(xiàn)數(shù)據(jù)庫查詢分頁一般有幾種方式,分別簡單介紹?2、JSP與SERVLET的區(qū)別3、JSP的內(nèi)置對(duì)象由什么得到的下次課預(yù)習(xí)Web應(yīng)