一、實驗目的

1. 掌握使用傳統(tǒng)的方法訪問數(shù)據(jù)庫;

2. 掌握使用數(shù)據(jù)源的方法訪問數(shù)據(jù)庫。

二、實驗原理

數(shù)據(jù)庫應用是Web應用開發(fā)的一個" />

国产成人精品无码青草_亚洲国产美女精品久久久久∴_欧美人与鲁交大毛片免费_国产果冻豆传媒麻婆精东

15158846557 在線咨詢 在線咨詢
15158846557 在線咨詢
所在位置: 首頁 > 營銷資訊 > 網(wǎng)站運營 > Java web實驗報告:JDBC訪問數(shù)據(jù)庫

Java web實驗報告:JDBC訪問數(shù)據(jù)庫

時間:2023-10-06 16:06:01 | 來源:網(wǎng)站運營

時間:2023-10-06 16:06:01 來源:網(wǎng)站運營

Java web實驗報告:JDBC訪問數(shù)據(jù)庫:注:本實驗代碼要根據(jù)實際做適當修改才能運行

一、實驗目的

1. 掌握使用傳統(tǒng)的方法訪問數(shù)據(jù)庫;

2. 掌握使用數(shù)據(jù)源的方法訪問數(shù)據(jù)庫。

二、實驗原理

數(shù)據(jù)庫應用是Web應用開發(fā)的一個重要應用。Web應用程序訪問數(shù)據(jù)庫有兩種方法:傳統(tǒng)的方法和使用JNDI數(shù)據(jù)源的方法。

傳統(tǒng)方法訪問數(shù)據(jù)庫的步驟是:①加載數(shù)據(jù)庫驅(qū)動程序;②建立連接對象;③創(chuàng)建語句對象;④獲得結(jié)果集;⑤關(guān)閉有關(guān)連接對象。

使用數(shù)據(jù)源訪問數(shù)據(jù)庫的步驟是:①配置數(shù)據(jù)源(局部數(shù)據(jù)源或全局數(shù)據(jù)源);②通過JNDI機制查找命名數(shù)據(jù)源;③通過數(shù)據(jù)源對象創(chuàng)建連接對象;④其他與傳統(tǒng)方法一致。

三、實驗內(nèi)容與步驟

(一)使用傳統(tǒng)方法通過JSP頁面訪問數(shù)據(jù)庫

【步驟1】創(chuàng)建數(shù)據(jù)庫。假設(shè)在SQL Server 2000建立了一個名為bookstore的數(shù)據(jù)庫,在其中建立books表,向books表中插入幾條記錄。代碼如下:

create database bookstoreGOUse bookstoreCREATE TABLE books ( bookid character(5) PRIMARY KEY, --書號 title varchar(80), --書名author character varying(20), --作者 publisher character varying (40), --出版社 price real --價格);GoINSERT INTO books VALUES ('204','Head First Servlets & JSP', 'Bryan Basham', '中國電力出版社',98.00);INSERT INTO books VALUES ('201', 'Servlets 與JSP 核心教程', 'Hall Marty','清華大學出版社',45);INSERT INTO books VALUES ('202', 'Tomcat與Java Web 開發(fā)技術(shù)祥解', '孫衛(wèi)琴', '機械工業(yè)出版社',45);INSERT INTO books VALUES ('203', 'JSP 應用開發(fā)技術(shù)', '柳永坡','人民郵電出版社',52);INSERT INTO books VALUES ('205', 'J2EE 1.4 編程指南', 'Spielman Sue','電子工業(yè)出版社',68);注意:需要將數(shù)據(jù)庫的JDBC驅(qū)動程序安裝到應用程序的WEB-INF/lib目錄中

【步驟2】使用下面JSP頁面displayBooks.jsp訪問books表中的數(shù)據(jù)。

<%@ page contentType="text/html; charset=gb2312" %><%@ page import="java.sql.*"%><html><head> <title>Database Access Test</title></head><body><%try {Class.forName("org.postgresql.Driver");String dburl = "jdbc:postgresql://localhost:5432/bookstore";Connection conn = DriverManager.getConnection(dburl, "bookstore", "bookstore"); Statement stmt = conn.createStatement();String sql = "SELECT * FROM books" ;ResultSet rs = stmt.executeQuery(sql);out.println("<table border=1>");out.println("<tr><td>書號</td><td>書名</td><td>作者</td><td>價格</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 (Exception e) { out.println(e.getMessage());}%></body></html>通過數(shù)據(jù)源訪問數(shù)據(jù)庫

【步驟1】建立局部數(shù)據(jù)源

在Web應用程序中建立一個META-INF目錄,在其中建立一個context.xml文件,內(nèi)容如下:

<?xml version="1.0" encoding="UTF-8"?><Context reloadable="true"><Resourceauth="Container"driverClassName="net.sourceforge.jtds.jdbc.Driver"maxActive="10" maxIdle="2" maxWait="5000"name="jdbc/bookDS"username="sa"password="123"type="javax.sql.DataSource"url="jdbc:jtds:sqlserver://localhost:1433/;DatabaseName=bookstore"validationQuery="select 1"/></Context>【步驟2】使用下面的JSP頁面displayBooks.jsp訪問數(shù)據(jù)庫

<%@ page contentType="text/html; charset=gb2312" %><%@ page import="java.sql.*, javax.sql.*,javax.naming.*"%><html><head> <title>DataSource Test</title></head><body><%try {Context context = new InitialContext();DataSource ds = (DataSource) context.lookup("java:comp/env/jdbc/bookDS");Connection conn = ds.getConnection();Statement stmt = conn.createStatement();ResultSet rs = stmt.executeQuery("SELECT * FROM books");out.println("<table border=1>");out.println("<tr><td>書號</td><td>書名</td><td>作者</td><td>價格</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 (Exception e) { out.println(e.getMessage());}%></body></html>綜合應用。本實驗采用MVC設(shè)計模式,通過數(shù)據(jù)源和DAO對象訪問數(shù)據(jù)庫。其中JavaBeans實現(xiàn)模型,訪問數(shù)據(jù)庫,Servlet實現(xiàn)控制器,JSP頁面實現(xiàn)視圖。

· 模型包括2個JavaBean:BookBean用于存放圖書信息,BookDAO用于訪問數(shù)據(jù)庫。

· 控制器包括2個Servlet:BookQueryServlet根據(jù)請求參數(shù)查詢圖書信息、BookInsertServlet用來向數(shù)據(jù)庫中插入數(shù)據(jù)。

· 視圖包括4個JSP頁面:bookQuery.jsp顯示查詢頁面、bookInsert.jsp顯示插入頁面、display.jsp顯示查詢結(jié)果頁面和errorPage.jsp顯示錯誤頁面。

【步驟1】存放圖書信息的JavaBeans代碼BookBean.java,它也是一個傳輸對象。

package com.beans;import java.io.*;public class BookBean implements Serializable{ private String bookid = null; private String title = null; private String author = null; private String publisher = null; private float price = 0.0F; public BookBean(){} public BookBean(String bookId, String author, String title, String publisher, float price) { this.bookid = bookId; this.title = title; this.author = author; this.publisher = publisher;this.price = price; } public String getBookid() { return this.bookid; } public String getTitle() { return title; } public String getAuthor() { return this.author; } public float getPrice() { return price; } public String getPublisher () { return publisher; } public void setBookid(String bookid){ this.bookid=bookid; } public void setTitle(String title){this.title=title; } public void setAuthor(String author){ this. author = author; } public void setPrice(float price){this.price=price; } public void setPublisher (String publisher){ this.publisher = publisher;}}【步驟2】下面的BookDAO是一個簡單的JavaBeans,它實現(xiàn)數(shù)據(jù)庫的訪問。

package com.beans;import java.sql.*;import javax.sql.*;import javax.naming.*;import java.util.ArrayList;import com.beans.BookBean;public class BookDAO{ private static InitialContext context= null; private DataSource dataSource = null; public BookDAO(){ try{ if(context == null){ context = new InitialContext(); } dataSource = (DataSource)context.lookup("java:comp/env/jdbc/bookDS"); }catch(NamingException e2){ } } // 根據(jù)書號查詢圖書信息 public BookBean searchBook(String bookid){ Connection conn = null; PreparedStatement pstmt = null; ResultSet rst = null; BookBean book = new BookBean(); try{ conn = dataSource.getConnection(); pstmt = conn.prepareStatement("SELECT * FROM books WHERE bookid=?"); 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")); return book; }else{ return null; } }catch(SQLException se){ return null; }finally{ try{ conn.close(); }catch(SQLException se){ } } } // 插入一本圖書記錄 public boolean insertBook(BookBean book){ Connection conn = null; PreparedStatement pstmt = null; try{ conn = dataSource.getConnection(); pstmt = conn.prepareStatement( "INSERT INTO books VALUES(?,?,?,?,?)"); 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(); return true; }catch(SQLException se){ return false; }finally{ try{ conn.close(); }catch(SQLException se){ } } } }【步驟3】下面的JSP頁面bookQuery.jsp實現(xiàn)根據(jù)書號查詢圖書信息

<%@ page contentType="text/html; charset=gb2312" %><html><head> <title>Book Query</title></head><body>請輸入一個書號:<br><form action="bookquery.do" method = "post"><input type="text" name="bookid"><br><input type="submit" value="提交"></form></body></html>【步驟4】下面的JSP頁面bookInsert.jsp實現(xiàn)向數(shù)據(jù)庫中插入數(shù)據(jù)

<%@ page contentType="text/html; charset=gb2312" %><html><head> <title>Book Insert</title></head><body><h3>請輸入圖書信息:</h3><% if(request.getAttribute("result")!=null) out.print(request.getAttribute("result"));%><form action = "bookinsert.do" method = "post"> <table> <tr><td>書號</td> <td><input type="text" name="bookid" ></td></tr> <tr><td>書名</td><td><input type="text" name="title"></td></tr> <tr><td>作者</td><td><input type="text" name="author" ></td></tr> <tr><td>出版社</td><td><input type="text" name="publisher" ></td></tr> <tr><td>單價</td><td><input type="text" name="price" ></td></tr> <tr><td><input type="submit" value="確定" ></td> <td><input type="reset" value="重置" ></td> </tr></table></form></body></html>【步驟5】顯示查詢結(jié)果的JSP頁面display.jsp:<%@ page contentType="text/html;charset=gb2312"%><jsp:useBean id="book" class="com.beans.BookBean" scope="request"/><html><body> 書號:<jsp:getProperty name="book" property="bookid"/> 書名:<jsp:getProperty name="book" property="title"/> 作者:<jsp:getProperty name="book" property="author"/> 出版社:<jsp:getProperty name="book" property="publisher"/> 價格:<jsp:getProperty name="book" property="price"/></body></html>【步驟6】錯誤頁面errorPage.jsp代碼如下:

<%@ page contentType="text/html;charset=gb2312"%><html><body> 對不起,您查的圖書不存在!</body></html>【步驟7】下面的Servlet實現(xiàn)從請求參數(shù)獲得書號,然后從數(shù)據(jù)庫中查找該書,最后根據(jù)查詢結(jié)果將請求轉(zhuǎn)發(fā)到顯示頁面(display.jsp)或錯誤頁面(errorPage.jsp)。

package com.control;import java.io.*;import java.sql.*;import javax.servlet.*;import javax.servlet.http.*;import com.beans.BookBean;import com.beans.BookDAO;public class BookQueryServlet extends HttpServlet{ public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{ String bookid = request.getParameter("bookid"); BookDAO bookdao = new BookDAO(); BookBean book = bookdao.searchBook(bookid); if(book!=null){ request.getSession().setAttribute("book", book); RequestDispatcher view = request.getRequestDispatcher("/display.jsp"); view.forward(request, response); }else{ RequestDispatcher view = request.getRequestDispatcher("/errorPage.jsp"); view.forward(request, response); } } }【步驟8】下面的Servlet實現(xiàn)向數(shù)據(jù)庫插入數(shù)據(jù),并將控制請求的轉(zhuǎn)發(fā)到bookInsert.jsp頁面。

package com.control;import java.io.*;import java.sql.*;import javax.servlet.*;import javax.servlet.http.*;import com.beans.BookBean;import com.beans.BookDAO;public class BookInsertServlet extends HttpServlet{ public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{ request.setCharacterEncoding("gb2312"); String message = null; BookBean book = new BookBean( request.getParameter("bookid"),request.getParameter("title"), request.getParameter("author"),request.getParameter("publisher"), Float.parseFloat(request.getParameter("price")) ); BookDAO bookdao = new BookDAO(); boolean success = bookdao.insertBook(book); if(success){ message = "成功插入一條記錄!"; }else{ message = "插入記錄錯誤!"; } request.setAttribute("result",message); RequestDispatcher view = request.getRequestDispatcher("/bookInsert.jsp"); view.forward(request, response); }}【步驟9】在DD文件中部署Servlet,將下列代碼添加到DD文件的適當位置

<servlet> <servlet-name>bookQuery</servlet-name> <servlet-class>com.control.BookQueryServlet</servlet-class> </servlet><servlet> <servlet-name>bookInsert</servlet-name> <servlet-class>com.control.BookInsertServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>bookQuery</servlet-name> <url-pattern>/bookquery.do</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>bookInsert</servlet-name> <url-pattern>/bookinsert.do</url-pattern> </servlet-mapping>運行bookQuery.jsp,進行查詢操作:




運行bookInsert.jsp,進行插入操作:

實驗總結(jié)

本次實驗,我掌握了使用傳統(tǒng)的方法和數(shù)據(jù)源的方法訪問數(shù)據(jù)庫;這次javaweb課程設(shè)計的制作使我對數(shù)據(jù)庫的理解更加深刻,也使我認識到了自己在第五章節(jié)的學習中的很多不足之處。無論是編寫程序還是完成現(xiàn)實生活中的其他事情,我們都必須從頭開始,逐步完成。不但要完成更要力求做到盡善盡美。

關(guān)鍵詞:訪問,數(shù)據(jù),報告,實驗

74
73
25
news

版權(quán)所有? 億企邦 1997-2025 保留一切法律許可權(quán)利。

為了最佳展示效果,本站不支持IE9及以下版本的瀏覽器,建議您使用谷歌Chrome瀏覽器。 點擊下載Chrome瀏覽器
關(guān)閉