实验12 JDBC与JSP实践

实验12 JDBC与JSP实践

12.1实验目的

1、理解JDBC的工作原理;

2、掌握获取数据库连接的代码编写技巧;

3、掌握在JSP页面中对数据进行增、删、改、查等操作; 4、提高代码的阅读、分析能力。

12.2 实验环境

1.MyEclipse插件平台、 2.Weblogic(或者Tomcat)容器

3.MySQl(或者SQLServer、Oracle)数据库

12.3实验知识背景 12.3.1 JDBC基础

1.JDBC技术简介

JDBC是Java DataBase Connectivity(Java 数据连接)技术的简称,是一种可用于执行SQL语句的Java API。它由一些Java语言编写的类和接口组成;

JDBC为数据库应用开发人员、数据库前台工具开发人员提供了一种标准的应用程序设计接口,使开发人员可以用纯Java语言编写完整的数据库应用程序。

JDBC主要功能有:与数据库建立连接;向数据库发送SQL语句;处理数据返回的结果。 2. JDBC工作原理

JDBC有两个程序包: ? ? ? ? ? ? ?

java.sql:核心包,这个包中的类主要完成数据库的基本操作,如生成连接、执行SQL语句、预处理SQL语句等;

javax.sql:扩展包,主要为数据库方面的高级操作提供了接口和类。 Driver 接口:加载驱动程序

DriverManager类:装入所需的JDBC驱动程序,编程时调用它的方法来创建连接; Connection接口:编程时使用该类对象创建Statement对象; Statement接口:编程时使用该类对象得到ResultSet对象 ResultSet类:负责保存Statement执行后所产生的查询结果 JDBC常用类和接口:

JDBC的基本工作原理就是通过这些API来实现与数据库建立连接、执行SQL 语句、处理结果 等操作,如图12-1 所示。

1

图12-1 JDBC工作原理示意图

12.3.2 JDBC工作方式

JDBC目前使用得较多的工作方式为JDBC-ODBC桥连方式和纯Java驱动方式。如图12-2所示。

图12-2 JDBC桥接与驱动方式示意图

桥连方式本质上是将对JDBC API的调用,转换为对另一组数据库连接API的调用。这种工作方式的优点是可以访问所有ODBC可以访问的数据库,缺点也比较明显,执行效率低、功能不够强大。JDBC-ODBC桥接工作方式示意图如图12-3所示。

图12-3 JDBC-ODBC桥接工作方式

纯Java驱动方式是使用由数据库供应商提供的JDBC驱动直接访问数据库的操作方式,这种方式的优点为100%使用Java语言开发,开发效率高,跨平台性能好;缺点是当访问不同的数据库需要下载专

2

用的JDBC驱动。JDBC纯Java驱动工作方式示意图如图12-4所示。

图12-4 JDBC纯Java驱动工作

12.3.3 JDBC技术的使用

JDBC的基本操作步骤: ? ? ? ? ? ? ?

创建数据源(使用JDBC-ODBC桥式驱动程序时必需创建); 注册、加载特定的驱动程序; 创建连接-- Connection对象;

利用Connection对象生成Statement对象;

利用Statement对象执行SQL语句,如增、删、改、查; 若是执行查询语句,还要从ResultSet读取数据; 关闭ResultSet、Statement、Connection等。 try {

Class.forName(JDBC驱动类); } catch (ClassNotFoundException e) { System.out.println(\无法找到驱动类\} try {

下面是一个使用JDBC技术操作数据库的示例:

①注册JDBC驱动

②获得数据库连接

Connection con=DriverManager.getConnection(JDBC URL,数据库用户名,密码); Statement stmt = con.createStatement();

③JDBC URL标识要访问的数据库

ResultSet rs = stmt.executeQuery(\ while (rs.next()) {

int x = rs.getInt(\ String s = rs.getString(\ float f = rs.getFloat(\ }

con.close(); } catch (SQLException e) {

3

④发送SQL操作命令

⑤SQL命令执行后得到的结果处

⑥释放资源

e.printStackTrace(); }

12.3.4 预处理语句在JDBC的应用

当向数据库发送一个SQL语句,比如“Select * from student”,数据库中的SQL解释器负责将把SQL语句生成底层的内部命令,然后执行该命令,完成有关的数据操作;如果不断地向数据库提交SQL语句势必增加数据库中SQL解释器的负担,影响执行的速度;如果应用程序能针对连接的数据库,事先就将SQL语句解释为数据库底层的内部命令,然后直接让数据库去执行这个命令,显然不仅减轻了数据库的负担,而且也提高了访问数据库的速度。

针对上述的情况,在JDBC的实际应用中,如果使用Connection和某个数据库建立了连接对象conn,那么conn就可以调用preparedStatement(String sql)方法对SQL语句进行预编译处理,生成该数据库底层的内部命令,并将该命令封装在PreparedStatement对象中,那么该对象调用相应的方法都可以使得该底层的内部命令被数据库执行;在创建PreparedStatement对象时,SQL命令语句是作为参数提供的;由于SQL命令中的未知值的位置是已知的,使用? 符号来表示,运行SQL语句时,可以根据需要设置实际值。

例如:

PreparedStatement ps;

ps = conn.prepareStatement(“insert into table (col1,col2) values (?, ?)”); ps.setInt(1,100);

ps.setString(2,”Dennis”); ps.execute();

12.4 实验内容及步骤

1.使用JDBC-ODBC桥接方式实现ilike信息管理系统的管理员身份登录功能,要求使用会话跟踪技术在主页面上显示管理员的身份,具体业务流如图12-5所示。

图12-5 系统管理员登录模块用例图

(1)新建Access数据库db_ilike.mdb,在里面建立表admin_tb,表结构如图12-6所示。建好表后往表输入一条记录,作为登录测试使用。

4

图12-6 表admin_tb结构

(2)打开“控制面板—管理工作—数据源(ODBC)”配置ODBC数据源,将建好的Access数据库作为数据源,命名为db_ilike,如图12-7所示。

图12-7 配置ODBC数据源

(3)在Myeclipse中新建一Web项目,在项目中新建login.jsp页面,该页面主要功能为提供登录输入界面,当输入密码不正确的时候会出现提示。如图12-8所示。

源代码:

<%@ page contentType=\ %>

登陆