实验8jdbc数据库访问教学提纲.docx
《实验8jdbc数据库访问教学提纲.docx》由会员分享,可在线阅读,更多相关《实验8jdbc数据库访问教学提纲.docx(16页珍藏版)》请在冰豆网上搜索。
实验8jdbc数据库访问教学提纲
实验8-jdbc数据库访问
实验8JDBC访问数据库
一、实验目的
1.掌握使用传统的方法访问数据库;
2.掌握使用数据源的方法访问数据库。
二、实验原理
数据库应用是Web应用开发的一个重要应用。
Web应用程序访问数据库有两种方法:
传统的方法和使用JNDI数据源的方法。
传统方法访问数据库的步骤是:
①加载数据库驱动程序;②建立连接对象;③创建语句对象;④获得结果集;⑤关闭有关连接对象。
使用数据源访问数据库的步骤是:
①配置数据源(局部数据源或全局数据源);②通过JNDI机制查找命名数据源;③通过数据源对象创建连接对象;④其他与传统方法一致。
三、实验内容与步骤
(一)使用传统方法通过JSP页面访问数据库
【步骤1】创建数据库。
假设在PostgreSQL建立了一个名为bookstore的数据库,在其中建立books表,代码如下:
CREATETABLEbooks(
bookidcharacter(5)PRIMARYKEY,--书号
titlevarchar2(80),--书名
authorcharactervarying(20),--作者
publishercharactervarying(40),--出版社
pricereal--价格
);
向books表中插入几条记录,代码如下:
INSERTINTObooksVALUES
('204','HeadFirstServlets&JSP','BryanBasham','中国电力出版社',98.00);
INSERTINTObooksVALUES
('201','Servlets与JSP核心教程','HallMarty','清华大学出版社',45);
INSERTINTObooksVALUES
('202','Tomcat与JavaWeb开发技术祥解','孙卫琴','机械工业出版社',45);
INSERTINTObooksVALUES
('203','JSP应用开发技术','柳永坡','人民邮电出版社',52);
INSERTINTObooksVALUES
('205','J2EE1.4编程指南','SpielmanSue','电子工业出版社',68);
注意:
需要将数据库的JDBC驱动程序安装到应用程序的WEB-INF\lib目录中。
【步骤2】使用下面JSP页面displayBooks.jsp访问books表中的数据。
<%@pagecontentType="text/html;charset=gb2312"%>
<%@pageimport="java.sql.*"%>
DatabaseAccessTest<%
try{
Class.forName("org.postgresql.Driver");
Stringdburl="jdbc:
postgresql:
//localhost:
5432/bookstore";
Connectionconn=DriverManager.getConnection(dburl,"bookstore","bookstore");
Statementstmt=conn.createStatement();
Stringsql="SELECT*FROMbooks";
ResultSetrs=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(Exceptione){
out.println(e.getMessage());
}
%>
运用mysql的代码如下:
<%@pagecontentType="text/html;charset=gb2312"%>
<%@pageimport="java.sql.*"%>
DatabaseAccessTest<%
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("");
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(Exceptione){
out.println(e.getMessage());
}
%>
图1displayBooks.jsp
(二)通过数据源访问数据库
注意:
需要将数据库的JDBC驱动程序安装到Tomcat安装目录的\lib目录中,并重新启动Tomcat服务器。
【步骤1】建立局部数据源
在Web应用程序中建立一个META-INF目录,在其中建立一个context.xml文件,内容如下:
xmlversion="1.0"encoding="utf-8"?
>
name="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"/>
【步骤2】使用下面的JSP页面displayBooks.jsp访问数据库
<%@pagecontentType="text/html;charset=gb2312"%>
<%@pageimport="java.sql.*,javax.sql.*,javax.naming.*"%>
DataSourceTest
<%
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("");
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(Exceptione){
out.println(e.getMessage());
}
%>
图2displayBooks.jsp
(三)综合应用。
本实验采用MVC设计模式,通过数据源和DAO对象访问数据库。
其中JavaBeans实现模型,访问数据库,Servlet实现控制器,JSP页面实现视图。
∙模型包括2个JavaBean:
BookBean用于存放图书信息,BookDAO用于访问数据库。
∙控制器包括2个Servlet:
BookQueryServlet根据请求参数查询图书信息、BookInsertServlet用来向数据库中插入数据。
∙视图包括4个JSP页面:
bookQuery.jsp显示查询页面、bookInsert.jsp显示插入页面、display.jsp显示查询结果页面和errorPage.jsp显示错误页面。
【步骤1】存放图书信息的JavaBeans代码BookBean.java,它也是一个传输对象。
packagecom.beans;
importjava.io.*;
publicclassBookBeanimplementsSerializable{
privateStringbookid=null;
privateStringtitle=null;
privateStringauthor=null;
privateStringpublisher=null;
privatefloat