《实验8-jdbc数据库访问(9页).doc》由会员分享,可在线阅读,更多相关《实验8-jdbc数据库访问(9页).doc(9页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、-第 1 页实验实验 8-jdbc 数据数据库访问库访问-第 2 页实验实验 8 JDBC 访问数据库访问数据库一、实验目的一、实验目的1.掌握使用传统的方法访问数据库;2.掌握使用数据源的方法访问数据库。二、实验原理二、实验原理数据库应用是 Web 应用开发的一个重要应用。Web 应用程序访问数据库有两种方法:传统的方法和使用 JNDI 数据源的方法。传统方法访问数据库的步骤是:加载数据库驱动程序;建立连接对象;创建语句对象;获得结果集;关闭有关连接对象。使用数据源访问数据库的步骤是:配置数据源(局部数据源或全局数据源);通过JNDI 机制查找命名数据源;通过数据源对象创建连接对象;其他与传
2、统方法一致。三、实验内容与步骤三、实验内容与步骤(一)使用传统方法通过 JSP 页面访问数据库【步骤 1】创建数据库。假设在 PostgreSQL 建立了一个名为 bookstore 的数据库,在其中建立 books 表,代码如下:CREATE TABLE books(bookid character(5)PRIMARY KEY,-书号title varchar2(80),-书名author character varying(20),-作者publisher character varying(40),-出版社price real-价格向 books 表中插入几条记录,代码如下:INSERT
3、 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 开发技术祥解,孙卫琴,机械工业出版社,45);INSERT INTO books VALUES(203,JSP 应用开发技术,柳永坡,人民邮电出版社,52);INSERT INTO books VALUES(20
4、5,J2EE 1.4 编程指南,Spielman Sue,电子工业出版社,68);注意注意:需要将数据库的 JDBC 驱动程序安装到应用程序的 WEB-INFlib 目录中。【步骤 2】使用下面 JSP 页面 displayBooks.jsp 访问 books 表中的数据。Database Access Testtry Class.forName(org.postgresql.Driver);-第 3 页String dburl=jdbc:postgresql:/localhost:5432/bookstore;Connectionconn=DriverManager.getConnectio
5、n(dburl,bookstore,bookstore);Statement stmt=conn.createStatement();String sql=SELECT*FROM books;ResultSet rs=stmt.executeQuery(sql);out.println();out.println(书 号 书 名 作 者 价 格);while(rs.next()out.println(+rs.getString(1)+rs.getString(2)+rs.getString(3)+rs.getString(5)+);out.println();rs.close();stmt.c
6、lose();conn.close();catch(Exception e)out.println(e.getMessage();运用 mysql 的代码如下:Database Access Testtry Class.forName(com.mysql.jdbc.Driver);String dburl=jdbc:mysql:/localhost:3306/bookstore;Connection conn=DriverManager.getConnection(dburl,root,);Statement stmt=conn.createStatement();String sql=SEL
7、ECT*FROM books;ResultSet rs=stmt.executeQuery(sql);out.println();out.println(书号书名作者价格);while(rs.next()out.println(+rs.getString(1)+rs.getString(2)+rs.getString(3)+rs.getString(5)+);out.println();rs.close();stmt.close();conn.close();catch(Exception e)-第 4 页out.println(e.getMessage();图 1 displayBooks.
8、jsp(二)通过数据源访问数据库注意注意:需要将数据库的 JDBC 驱动程序安装到 Tomcat 安装目录的lib 目录中,并重新启动 Tomcat 服务器。【步骤 1】建立局部数据源在 Web 应用程序中建立一个 META-INF 目录,在其中建立一个 context.xml 文件,内容如下:【步骤 2】使用下面的 JSP 页面 displayBooks.jsp 访问数据库 DataSource Testtry Context context=new InitialContext();DataSourceds=(DataSource)context.lookup(java:comp/env/
9、jdbc/bookDS);Connection conn=ds.getConnection();Statement stmt=conn.createStatement();ResultSet rs=stmt.executeQuery(SELECT*FROM books);out.println();out.println(书 号 书 名 作 者 价 格);while(rs.next()out.println(+rs.getString(1)+rs.getString(2)+rs.getString(3)+rs.getString(5)+);out.println();rs.close();st
10、mt.close();conn.close();catch(Exception e)out.println(e.getMessage();图 2 displayBooks.jsp-第 5 页(三)综合应用。本实验采用 MVC 设计模式,通过数据源和 DAO 对象访问数据库。其中 JavaBeans 实现模型,访问数据库,Servlet 实现控制器,JSP 页面实现视图。模型包括 2 个 JavaBean:BookBean 用于存放图书信息,BookDAO 用于访问数据库。控制器包括 2 个 Servlet:BookQueryServlet 根据请求参数查询图书信息、BookInsertServ
11、let 用来向数据库中插入数据。视图包括 4 个 JSP 页面:bookQuery.jsp 显示查询页面、bookInsert.jsp 显示插入页面、display.jsp 显示查询结果页面和 errorPage.jsp 显示错误页面。【步骤 1】存放图书信息的 JavaBeans 代码 BookBean.java,它也是一个传输对象。package com.beans;import java.io.*;public class BookBean implements Serializableprivate String bookid=null;private String title=nul
12、l;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 ge
13、tBookid()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;publ
14、ic 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,它实现数据库的访问。package com.beans;import java.sql.*;import javax.sql.*;import javax.naming.*;import jav
15、a.util.ArrayList;import com.beans.BookBean;public class BookDAOprivate static InitialContext context=null;private DataSource dataSource=null;public BookDAO()tryif(context=null)context=new InitialContext();dataSource=(DataSource)context.lookup(java:comp/env/jdbc/bookDS);catch(NamingException e2)-第 6
16、页/根据书号查询图书信息public BookBean searchBook(String bookid)Connection conn=null;PreparedStatement pstmt=null;ResultSet rst=null;BookBeanbook=new BookBean();tryconn=dataSource.getConnection();pstmt=conn.prepareStatement(SELECT*FROM books WHERE bookid=?);pstmt.setString(1,bookid);rst=pstmt.executeQuery();if
17、(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;elsereturnnull;catch(SQLException se)return null;finallytryconn.close();catch(SQLException
18、se)/插入一本图书记录public boolean insertBook(BookBean book)Connection conn=null;PreparedStatement pstmt=null;tryconn=dataSource.getConnection();pstmt=conn.prepareStatement(INSERT INTO books VALUES(?,?,?,?,?);pstmt.setString(1,book.getBookid();pstmt.setString(2,book.getTitle();pstmt.setString(3,book.getAuth
19、or();pstmt.setString(4,book.getPublisher();pstmt.setFloat(3,book.getPrice();pstmt.executeUpdate();pstmt.close();return true;catch(SQLException se)return false;-第 7 页finallytryconn.close();catch(SQLException se)【步骤 3】下面的 JSP 页面 bookQuery.jsp 实现根据书号查询图书信息 Book Query请输入一个书号:图 3bookQuery.jsp【步骤 4】下面的 JS
20、P 页面 bookInsert.jsp 实现向数据库中插入数据 Book Insert请输入图书信息:%if(request.getAttribute(result)!=null)out.print(request.getAttribute(result);书号 书名作者出版社单价图 4bookInsert.jsp图 5插入成功【步骤 5】显示查询结果的 JSP 页面 display.jsp:书号:书名:作者:出版社:价格:图 6显示查询结果【步骤 6】错误页面 errorPage.jsp 代码如下:-第 8 页对不起,您查的图书不存在!图 7显示错误页面【步骤 7】下面的 Servlet 实
21、现从请求参数获得书号,然后从数据库中查找该书,最后根据查询结果将请求转发到显示页面(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 HttpServletpublic void doPost(
22、HttpServletRequest request,HttpServletResponse response)throws ServletException,IOExceptionString bookid=request.getParameter(bookid);BookDAO bookdao=new BookDAO();BookBean book=bookdao.searchBook(bookid);if(book!=null)request.getSession().setAttribute(book,book);RequestDispatcher view=request.getRe
23、questDispatcher(/display.jsp);view.forward(request,response);elseRequestDispatcher view=request.getRequestDispatcher(/errorPage.jsp);view.forward(request,response);【步骤 8】下面的 Servlet 实现向数据库插入数据,并将控制请求的转发到 bookInsert.jsp页面。package com.control;import java.io.*;import java.sql.*;import javax.servlet.*;i
24、mport javax.servlet.http.*;import com.beans.BookBean;import com.beans.BookDAO;public class BookInsertServlet extends HttpServletpublic void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOExceptionrequest.setCharacterEncoding(gb2312);String message=null;BookB
25、ean 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=成功插入一条记录!;elsemessage=插入记录
26、错误!;-第 9 页request.setAttribute(result,message);RequestDispatcher view=request.getRequestDispatcher(/bookInsert.jsp);view.forward(request,response);【步骤 9】在 DD 文件中部署 Servlet,将下列代码添加到 DD 文件的适当位置:bookQuerycom.control.BookQueryServletbookInsertcom.control.BookInsertServletbookQuery/bookquery.dobookInsert
27、/bookinsert.do四、思考题四、思考题1.简述使用数据源访问数据库一般步骤。答:数据库连接的一般步骤是:(1)加载 JDBC 驱动程序。(2)建立连接对象。(3)创建语句对象,语句对象有 3 种:Statement、PreparedStatement 和 CallableStatement。(4)执行 SQL 语句得到结果集对象,调用 ResultSet 的有关方法就可以完成对数据库的操作。(5)关闭建立的各种对象。2.简述使用数据源访问数据库比使用传统方法的优点。答:使用数据源是目前 Web 应用开发中建立数据库连接的首选方法。这种方法是事先建立如干连接对象,存放在连接池中。当应用程序需要一个连接对象时就从连接池中取出一个,使用完后再放回连接池。这样就可避免每次请求都创建连接对象,从而降低请求的响应时间,提高效率。