




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
實(shí)驗(yàn)8JDBC訪問數(shù)據(jù)庫一、實(shí)驗(yàn)?zāi)康?.掌握使用傳統(tǒng)的方法訪問數(shù)據(jù)庫;2.掌握使用數(shù)據(jù)源的方法訪問數(shù)據(jù)庫。二、實(shí)驗(yàn)原理數(shù)據(jù)庫應(yīng)用是Web應(yīng)用開發(fā)的一個(gè)重要應(yīng)用。Web應(yīng)用程序訪問數(shù)據(jù)庫有兩種方法:傳統(tǒng)的方法和使用JNDI數(shù)據(jù)源的方法。傳統(tǒng)方法訪問數(shù)據(jù)庫的步驟是:①加載數(shù)據(jù)庫驅(qū)動(dòng)程序;②建立連接對(duì)象;③創(chuàng)立語句對(duì)象;④獲得結(jié)果集;⑤關(guān)閉有關(guān)連接對(duì)象。使用數(shù)據(jù)源訪問數(shù)據(jù)庫的步驟是:①配置數(shù)據(jù)源〔局部數(shù)據(jù)源或全局?jǐn)?shù)據(jù)源〕;②通過JNDI機(jī)制查找命名數(shù)據(jù)源;③通過數(shù)據(jù)源對(duì)象創(chuàng)立連接對(duì)象;④其他與傳統(tǒng)方法一致。三、實(shí)驗(yàn)內(nèi)容與步驟〔一〕使用傳統(tǒng)方法通過JSP頁面訪問數(shù)據(jù)庫【步驟1】創(chuàng)立數(shù)據(jù)庫。假設(shè)在PostgreSQL建立了一個(gè)名為bookstore的數(shù)據(jù)庫,在其中建立books表,代碼如下:CREATETABLEbooks(bookidcharacter(5)PRIMARYKEY,--書號(hào)titlevarchar2(80),--書名authorcharactervarying(20),--作者publishercharactervarying(40),--出版社pricereal--價(jià)格);向books表中插入幾條記錄,代碼如下:INSERTINTObooksVALUES('204','HeadFirstServlets&JSP','BryanBasham','中國電力出版社',98.00);INSERTINTObooksVALUES('201','Servlets與JSP核心教程','HallMarty','清華大學(xué)出版社',45);INSERTINTObooksVALUES('202','Tomcat與JavaWeb開發(fā)技術(shù)祥解','孫衛(wèi)琴','機(jī)械工業(yè)出版社',45);INSERTINTObooksVALUES('203','JSP應(yīng)用開發(fā)技術(shù)','柳永坡','人民郵電出版社',52);INSERTINTObooksVALUES('205','J2EE1.4編程指南','SpielmanSue','電子工業(yè)出版社',68);注意:需要將數(shù)據(jù)庫的JDBC驅(qū)動(dòng)程序安裝到應(yīng)用程序的WEB-INF\lib目錄中。【步驟2】使用下面JSP頁面displayBooks.jsp訪問books表中的數(shù)據(jù)。<%@pagecontentType="text/html;charset=gb2312"%><%@pageimport="java.sql.*"%><html><head><title>DatabaseAccessTest</title></head><body><%try{Class.forName("org.postgresql.Driver");:5432/bookstore";Connectionconn=DriverManager.getConnection(dburl,"bookstore","bookstore");Statementstmt=conn.createStatement();Stringsql="SELECT*FROMbooks";ResultSetrs=stmt.executeQuery(sql);out.println("<tableborder=1>");out.println("<tr><td>書號(hào)</td><td>書名</td><td>作者</td><td>價(jià)格</td></tr>");while(rs.next()){out.println("<tr><td>"+rs.getString(1)+"</td><td>"+rs.getString(2)+"</td><td>"+rs.getString(3)+"</td><td>"+rs.getString(5)+"</td></tr>");}out.println("</table>");rs.close();stmt.close();conn.close();}catch(Exceptione){out.println(e.getMessage());}%></body></html>運(yùn)用mysql的代碼如下:<%@pagecontentType="text/html;charset=gb2312"%><%@pageimport="java.sql.*"%><html><head><title>DatabaseAccessTest</title></head><body> <%try{ Class.forName("com.mysql.jdbc.Driver"); Stringdburl="jdbc:mysql://localhost:3306/bookstore"; Connectionconn=DriverManager .getConnection(dburl,"root",""); Statementstmt=conn.createStatement(); Stringsql="SELECT*FROMbooks"; ResultSetrs=stmt.executeQuery(sql); out.println("<tableborder=1>"); out.println("<tr><td>書號(hào)</td><td>書名</td><td>作者</td><td>價(jià)格</td></tr>");while(rs.next()){ out.println("<tr><td>"+rs.getString(1)+"</td><td>" +rs.getString(2)+"</td><td>"+rs.getString(3) +"</td><td>"+rs.getString(5)+"</td></tr>"); } out.println("</table>"); rs.close(); stmt.close(); conn.close(); }catch(Exceptione){ out.println(e.getMessage()); } %></body></html>圖1displayBooks.jsp〔二〕通過數(shù)據(jù)源訪問數(shù)據(jù)庫注意:需要將數(shù)據(jù)庫的JDBC驅(qū)動(dòng)程序安裝到Tomcat安裝目錄的\lib目錄中,并重新啟動(dòng)Tomcat效勞器。【步驟1】建立局部數(shù)據(jù)源在Web應(yīng)用程序中建立一個(gè)META-INF目錄,在其中建立一個(gè)context.xml文件,內(nèi)容如下:<?xmlversion="1.0"encoding="utf-8"?><Contextreloadable="true"><Resourcename="jdbc/bookDS"type="javax.sql.DataSource"maxActive="4"maxIdle="2"username="bookstore"maxWait="5000"driverClassName="org.postgresql.Driver"password="bookstore"url="jdbc:mysql://localhost:3306/bookstore"/></Context>【步驟2】使用下面的JSP頁面displayBooks.jsp訪問數(shù)據(jù)庫<%@pagecontentType="text/html;charset=gb2312"%><%@pageimport="java.sql.*,javax.sql.*,javax.naming.*"%><html><head><title>DataSourceTest</title></head><body><%try{Contextcontext=newInitialContext();DataSourceds=(DataSource)context.lookup("java:comp/env/jdbc/bookDS");Connectionconn=ds.getConnection();Statementstmt=conn.createStatement();ResultSetrs=stmt.executeQuery("SELECT*FROMbooks");out.println("<tableborder=1>");out.println("<tr><td>書號(hào)</td><td>書名</td><td>作者</td><td>價(jià)格</td></tr>");while(rs.next()){out.println("<tr><td>"+rs.getString(1)+"</td><td>"+rs.getString(2)+"</td><td>"+rs.getString(3)+"</td><td>"+rs.getString(5)+"</td></tr>");}out.println("</table>");rs.close();stmt.close();conn.close();}catch(Exceptione){out.println(e.getMessage());}%></body></html>圖2displayBooks.jsp〔三〕綜合應(yīng)用。本實(shí)驗(yàn)采用MVC設(shè)計(jì)模式,通過數(shù)據(jù)源和DAO對(duì)象訪問數(shù)據(jù)庫。其中JavaBeans實(shí)現(xiàn)模型,訪問數(shù)據(jù)庫,Servlet實(shí)現(xiàn)控制器,JSP頁面實(shí)現(xiàn)視圖。模型包括2個(gè)JavaBean:BookBean用于存放圖書信息,BookDAO用于訪問數(shù)據(jù)庫??刂破靼?個(gè)Servlet:BookQueryServlet根據(jù)請(qǐng)求參數(shù)查詢圖書信息、BookInsertServlet用來向數(shù)據(jù)庫中插入數(shù)據(jù)。視圖包括4個(gè)JSP頁面:bookQuery.jsp顯示查詢頁面、bookInsert.jsp顯示插入頁面、display.jsp顯示查詢結(jié)果頁面和errorPage.jsp顯示錯(cuò)誤頁面?!静襟E1】存放圖書信息的JavaBeans代碼BookBean.java,它也是一個(gè)傳輸對(duì)象。packagecom.beans;importjava.io.*;publicclassBookBeanimplementsSerializable{privateStringbookid=null;privateStringtitle=null;privateStringauthor=null;privateStringpublisher=null;privatefloatprice=0.0F;publicBookBean(){}publicBookBean(StringbookId,Stringauthor,Stringtitle,Stringpublisher,floatprice){this.bookid=bookId;this.title=title;this.author=author;this.publisher=publisher;this.price=price;}publicStringgetBookid(){returnthis.bookid;}publicStringgetTitle(){returntitle;}publicStringgetAuthor(){returnthis.author;}publicfloatgetPrice(){returnprice;}publicStringgetPublisher(){returnpublisher;}publicvoidsetBookid(Stringbookid){this.bookid=bookid; }publicvoidsetTitle(Stringtitle){this.title=title; }publicvoidsetAuthor(Stringauthor){this.author=author; }publicvoidsetPrice(floatprice){this.price=price; }publicvoidsetPublisher(Stringpublisher){this.publisher=publisher;}}【步驟2】下面的BookDAO是一個(gè)簡(jiǎn)單的JavaBeans,它實(shí)現(xiàn)數(shù)據(jù)庫的訪問。packagecom.beans;importjava.sql.*;importjavax.sql.*;importjavax.naming.*;importjava.util.ArrayList;importcom.beans.BookBean;publicclassBookDAO{privatestaticInitialContextcontext=null;privateDataSourcedataSource=null;publicBookDAO(){ try{ if(context==null){ context=newInitialContext(); } dataSource=(DataSource)context.lookup("java:comp/env/jdbc/bookDS");}catch(NamingExceptione2){}}//根據(jù)書號(hào)查詢圖書信息publicBookBeansearchBook(Stringbookid){ Connectionconn=null;PreparedStatementpstmt=null;ResultSetrst=null;BookBeanbook=newBookBean();try{conn=dataSource.getConnection(); pstmt=conn.prepareStatement("SELECT*FROMbooksWHEREbookid=?"); pstmt.setString(1,bookid); rst=pstmt.executeQuery(); if(rst.next()){ book.setBookid(rst.getString("bookid")); book.setTitle(rst.getString("title"));book.setAuthor(rst.getString("author"));book.setPublisher(rst.getString("publisher"));book.setPrice(rst.getFloat("price")); returnbook;}else{returnnull;} }catch(SQLExceptionse){ returnnull; }finally{ try{ conn.close(); }catch(SQLExceptionse){ } }}//插入一本圖書記錄publicbooleaninsertBook(BookBeanbook){ Connectionconn=null; PreparedStatementpstmt=null; try{ conn=dataSource.getConnection(); pstmt=conn.prepareStatement( "INSERTINTObooksVALUES(?,?,?,?,?)"); pstmt.setString(1,book.getBookid()); pstmt.setString(2,book.getTitle()); pstmt.setString(3,book.getAuthor()); pstmt.setString(4,book.getPublisher()); pstmt.setFloat(3,book.getPrice()); pstmt.executeUpdate(); pstmt.close(); returntrue; }catch(SQLExceptionse){ returnfalse; }finally{ try{ conn.close(); }catch(SQLExceptionse){} }}}【步驟3】下面的JSP頁面bookQuery.jsp實(shí)現(xiàn)根據(jù)書號(hào)查詢圖書信息<%@pagecontentType="text/html;charset=gb2312"%><html><head><title>BookQuery</title></head><body>請(qǐng)輸入一個(gè)書號(hào):<br><formaction="bookquery.do"method="post"><inputtype="text"name="bookid"><br><inputtype="submit"value="提交"></form></body></html>圖3bookQuery.jsp【步驟4】下面的JSP頁面bookInsert.jsp實(shí)現(xiàn)向數(shù)據(jù)庫中插入數(shù)據(jù)<%@pagecontentType="text/html;charset=gb2312"%><html><head><title>BookInsert</title></head><body><h3>請(qǐng)輸入圖書信息:</h3><%if(request.getAttribute("result")!=null)out.print(request.getAttribute("result"));%><formaction="bookinsert.do"method="post"><table><tr><td>書號(hào)</td><td><inputtype="text"name="bookid"></td></tr><tr><td>書名</td><td><inputtype="text"name="title"></td></tr><tr><td>作者</td><td><inputtype="text"name="author"></td></tr><tr><td>出版社</td><td><inputtype="text"name="publisher"></td></tr><tr><td>單價(jià)</td><td><inputtype="text"name="price"></td></tr><tr><td><inputtype="submit"value="確定"></td><td><inputtype="reset"value="重置"></td></tr></table></form></body></html>圖4bookInsert.jsp圖5插入成功【步驟5】顯示查詢結(jié)果的JSP頁面display.jsp:<%@pagecontentType="text/html;charset=gb2312"%><jsp:useBeanid="book"class="com.beans.BookBean"scope="request"/><html><body>書號(hào):<jsp:getPropertyname="book"property="bookid"/>書名:<jsp:getPropertyname="book"property="title"/><jsp:getPropertyname="book"property="author"/>出版社:<jsp:getPropertyname="book"property="publisher"/>價(jià)格:<jsp:getPropertyname="book"property="price"/></body></html>圖6顯示查詢結(jié)果【步驟6】錯(cuò)誤頁面errorPage.jsp代碼如下:<%@pagecontentType="text/html;charset=gb2312"%><html><body>對(duì)不起,您查的圖書不存在!</body></html>圖7顯示錯(cuò)誤頁面【步驟7】下面的Servlet實(shí)現(xiàn)從請(qǐng)求參數(shù)獲得書號(hào),然后從數(shù)據(jù)庫中查找該書,最后根據(jù)查詢結(jié)果將請(qǐng)求轉(zhuǎn)發(fā)到顯示頁面(display.jsp)或錯(cuò)誤頁面(errorPage.jsp)。packagecom.control;importjava.io.*;importjava.sql.*;importjavax.servlet.*;importjavax.servlet..*;importcom.beans.BookBean;importcom.beans.BookDAO;publicclassBookQueryServletextendsServlet{publicvoiddoPost(ServletRequestrequest,ServletResponseresponse)throwsServletException,IOException{Stringbookid=request.getParameter("bookid");BookDAObookdao=newBookDAO();BookBeanbook=bookdao.searchBook(bookid);if(book!=null){request.getSession().setAttribute("book",book);RequestDispatcherview=request.getRequestDispatcher("/display.jsp");view.forward(request,response);}else{RequestDispatcherview=request.getRequestDispatcher("/errorPage.jsp");view.forward(request,response);}} }【步驟8】下面的Servlet實(shí)現(xiàn)向數(shù)據(jù)庫插入數(shù)據(jù),并將控制請(qǐng)求的轉(zhuǎn)發(fā)到bookInsert.jsp頁面。packagecom.control;importjava.io.*;importjava.sql.*;importjavax.servlet.*;importjavax.servlet..*;importcom.beans.BookBean;importcom.beans.BookDAO;publicclassBookInsertServletextendsServlet{publicvoiddoPost(ServletRequestrequest,ServletResponseresponse)throwsServletException,IOException{request.setCharacterEncoding("gb2312");Stringmessage=null;BookBeanbook=newBookBean(request.getParameter("bookid"),request.getParameter("title"),request.getParameter("author"),request.getParameter("publisher"),Float.parseFloat(request.getParameter("price")) );BookD
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 九安醫(yī)療2025年三季度財(cái)務(wù)風(fēng)險(xiǎn)分析詳細(xì)報(bào)告-圖文
- 供應(yīng)鋼材合同范本
- 精密滾珠絲杠副行業(yè)深度研究報(bào)告
- 2025年高收縮腈綸項(xiàng)目合作計(jì)劃書
- 變配電擴(kuò)容項(xiàng)目范圍
- 七年級(jí)語文期中知識(shí)點(diǎn)總結(jié)
- 七年級(jí)英語上冊(cè)閱讀理解知識(shí)點(diǎn)(大全)經(jīng)典
- 中國皮化產(chǎn)品行業(yè)市場(chǎng)調(diào)研分析及投資戰(zhàn)略咨詢報(bào)告
- 雞矢藤糖水溫潤(rùn)心底的鄉(xiāng)愁
- 一年級(jí)語文第一冊(cè)全冊(cè)教學(xué)計(jì)劃
- 王洪圖黃帝內(nèi)經(jīng)80課時(shí)講稿
- 關(guān)于領(lǐng)導(dǎo)干部報(bào)告?zhèn)€人有關(guān)事項(xiàng)的規(guī)定全文
- 個(gè)人借條電子版模板
- (全)電梯安全風(fēng)險(xiǎn)管控清單
- 護(hù)士服裝史話
- 2022年03月江蘇無錫市新吳區(qū)新安街道城管隊(duì)員招考聘用10人筆試題庫含答案解析
- 農(nóng)藥經(jīng)營(yíng)管理知識(shí)培訓(xùn)專家講座
- 《自主創(chuàng)新對(duì)于鋼結(jié)構(gòu)發(fā)展的重要性》2400字
- 食品采購與進(jìn)貨臺(tái)賬
- GB/T 24353-2022風(fēng)險(xiǎn)管理指南
- GB/T 6284-2006化工產(chǎn)品中水分測(cè)定的通用方法干燥減量法
評(píng)論
0/150
提交評(píng)論