第07章JSP数据库核心技术.ppt
《第07章JSP数据库核心技术.ppt》由会员分享,可在线阅读,更多相关《第07章JSP数据库核心技术.ppt(72页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第7章章 JSP操作数据库核心技术操作数据库核心技术 7.1 JDBC技术 7.2 JDBC的结构 7.3 JDBC核心编程接口 7.4 JDBC操作数据库的步骤 7.5 JDBC对事务的操作 7.6 JDBC对数据库操作实例 7.7 数据库连接池 JDBC是一套面向对象的应用程序接口,它制定了统一的访问各类关系数据库的标准接口,为各个数据库厂商提供了标准接口的实现。通过使用JDBC技术,开发人员可以用纯Java语言和标准的SQL语句编写完整的数据库应用程序,并且真正的实现了软件的跨平台型。7.1 JDBC技术技术 7.1.1 JDBC技术简介 返回1JDBC执行步骤 JDBC的全称为“Ja
2、va DataBase Connectivity”,它是一组使用Java语言编写的用于连接数据库的程序接口(API)。JDBC技术简介技术简介(1)JDBC主要完成以下4个步骤:(1)与数据库建立连接。(2)向数据库发送SQL语句。(3)处理发送的SQL语句。(4)将处理的结果进行返回。使用JDBC操作数据库如图所示。应用程序JDBC APIJDBC驱动管理器数据库驱动程序数据库2JDBC的优缺点 JDBC技术简介技术简介(2)qJDBC优点:JDBC与ODBC十分相似,便于软件开发人员的理解。JDBC使软件开发人员从复杂的驱动程序编写工作解脱出来,可以完全专著与业务逻辑的开发。JDBC支持多
3、种关系型数据库,这样可以增加软件的可移植性。JDBC编写接口是面向对象的,开发人员可以将常用的方法进行二次封装,从而提高代码的重用性。qJDBC缺点:通过JDBC访问数据库时,实际的操作速度会降低。虽然JDBC编程接口是面向对象的,但通过JDBC访问数据库依然是面向关系的。JDBC提供了对不同厂家的产品支持,这样对数据源的操作有所影响。返回7.2 JDBC的结构的结构 7.2.1 JDBC类型 7.2.2 数据库驱动程序 返回JDBC类型类型 目前比较常见的JDBC驱动程序可以分为4种,如表所示。驱动类型名称说明JDBC-ODBC桥通过JDBC访问ODBC接口的驱动程序。在使用过程中,客户机上
4、首先必须加载ODBC的二进制代码程序,必要时还需要加载数据库客户机代码。此驱动程序常常应用与企业网本地API此驱动是将客户机上的JDBC API转换为数据库管理系统(DBMS)来调用,实现数据库连接。同JDBC-ODBC桥驱动类型相似的是客户机必须加载某些必须的二进制代码程序网络Java驱动程序此驱动程序通过网络协议进行数据库连接。首先将JDBC转换成一种网络协议,该网络协议不同与DBMS使用的交互协议。然后再将该网络协议转换为DBMS协议。网络纯Java驱动是最灵活适用的驱动程序,利用网络服务可以将Java客户机连接到多种数据库上。但是交互过程中使用的协议需要由网络服务器提供本地协议纯Jav
5、a驱动程序(最快)此驱动程序将JDBC调用直接转换为DBMS使用的协议,客户机可以直接调用DBMS服务器,进行数据库操作。数据库制造商提供专用的DBMS使用协议返回数据库驱动程序数据库驱动程序 使用JDBC操作数据库首先必须要安装驱动程序,大多数数据库都有JDBC驱动程序,常见的驱动程序如表所示。数据库名称类包名驱动名称与URL地址SQL Server2000msbase.jar、mssqlserver.jar、msutil.jarcom.microsoft.jdbc.sqlserver.SQLServerDriverjdbc:microsoft:sqlserver:/localhost:14
6、33;DatabaseName=数据库名称SQL Server2005sqljdbc.jarcom.microsoft.sqlserver.jdbc.SQLServerDriverjdbc:sqlserver:/localhost:1433;databaseName=数 据库名称MYSQLmysql-connector-java-3.0.16-ga-bin.jarcom.mysql.jdbc.Driverjdbc:mysql:/localhost:3306/数据库名称oracleclass12.jaroracle.jdbc.driver.OracleDriverjdbc:oracle:thin
7、:dssw2k01:1521:数据库名称DB.DB2Driverjdbc:db2:/localhost:6789/数据库名称Derbyderby.jarorg.apache.derby.jdbc.EmbeddedDriverjdbc:derby:/localhost:1527:数据库名称;create=false返回7.3 JDBC核心编程接口核心编程接口 7.3.1 驱动器接口:Driver 7.3.2 驱动管理类:DriverManager 7.3.3 数据库连接接口:Connection 7.3.4 执行静态SQL语句接口:Statement 7.3.5 执行预编译的SQL语句接口:Pr
8、eparedStatement 7.3.6 处理存储过程语句接口:CallableStatement 7.3.7 返回查询结果集接口:ResultSet 返回驱动器接口:驱动器接口:Driver 任何一种数据库驱动程序都提供一个java.sql.Driver接口的驱动类,在加载某个数据库驱动程序的驱动类时,都创建自己的实例对象并向java.sql.DriverManage类 注 册 该 实 例 对 象。数 据 库 驱 动 加 载 在DriverManage类的执行过程如图所示。返回驱动管理类:驱动管理类:DriverManager(1)负责管理JDBC驱动程序的基本服务,作用于用户和驱动程序之
9、间,负责追踪可用的驱动程序,并在数据库和相应驱动程序之间建立连接。另外,DriverManager类也处理驱动程序登录时间限制及登录和跟踪消息的显示等事务。1追踪有用的驱动程序 DriverManager类中一系列驱动类通过调用DriverManager类中的registerDriver()方法进行了注册。程序员将不用直接调用DriverManager类中的registerDriver()方法;而是在加载驱动程序时,由驱动程序自动调用并加载驱动类,然后自动在DriverManager类中注册。DriverManager注册的方式有以下两种:驱动管理类:驱动管理类:DriverManager(2
10、)(1)通过Class静态类中的forName()方法进行调用。该方法通过Java反射技术加载驱动程序类。由于与外部设置无关,因此推荐使用这种加载驱动程序的方法。代码如下,其中“db.Driver”为数据库的驱动名称:Class.forName(db.Driver);(2)通过将数据库驱动名称添加到java.lang.System类中的jdbc.drivers属性中。该方式是一个由DriverManager类加载的驱动程序类名的列表,并用冒号(:)分隔。在上述两种方式中,新加载的驱动类都通过调用DriverManager类中的registerDriver()方法进行自动注册。出于安全方面的因素
11、,JDBC管理层将跟踪哪个类加载器提供哪个驱动程序。这样,当DriverManager类打开连接时,它仅使用本地文件系统或与发出连接请求的代码相同的类加载器提供的驱动程序。驱动管理类:驱动管理类:DriverManager(3)2建立连接 加载驱动类并在DriverManager类中注册后,即可用来与数据库建立连接。当调用 DriverManager类中getConnection()方法发出连接请求时,DriverManager类将检查每个驱动程序,并查看该类是否可以建立连接。例如,通过SQL Server2000数据库的驱动和URL获取数据库的连接。Class.forName(com.mic
12、rosoft.jdbc.sqlserver.SQLServerDriver);String url=jdbc:microsoft:sqlserver:/localhost:1433;DatabaseName=wy_userInfo;DriverManager.getConnection(url,user,password);DriverManager类除了getConnection()方法外,还存在其他的方法,如表所示。方法名称功能描述setLoginTimeout(int second)该方法是静态方式,表示等待数据库建立连接的时间setLogWriter(java.io.PrintWrit
13、er out)该方法是静态方式,表示设置日志输出流对象println(String messages)该方法是静态方式,表示输出指定消息返回数据库连接接口:数据库连接接口:Connection java.sql.Connection接口表示与特定数据库的连接,并在连接的上下文中可以执行SQL语句并返回结果。通过Connection对象可以获取一个数据库和表等数据库对象的详细信息。Connection接口中常用的方法如表所示。方法名称功能描述setAutoCommit(boolean bln)指定事务处理方式,参数设置为true时自动提交事务,false为手动提交事务getAutoCommit(
14、boolean bln)查看当前的Connection实例是否为自动事务提交模式,如果是返回true,否则返回falsecreateStatement()创建Statement对象示例prepareStatement(String sql)获得PreparedStatement对象实例,参数为预编译的SQLprepareCall(String SQL)获得CallableStatement对象实例,参数为存储过程名称setReadOnly(boolean bln)设置Connection实例的读取模式,默认为false,关闭只读模式commit()提交事务rollback()回滚事务sClos
15、ed()判断当前的连接是否关闭,如果关闭返回true,否则返回falseclose()关闭当前数据库连接返回执行静态执行静态SQL语句接口:语句接口:Statement(1)java.sql.Statement接口用来执行静态的SQL语句,并返回执行结果。处理静态的SQL语句主要分为3种Statement对象:Statement、PreparedStatement、CallableStatement。它们作为在指定连接上执行SQL语句的容器。这3种Statement对象的关系如图所示。执行静态执行静态SQL语句接口:语句接口:Statement(2)1创建Statement对象 取得数据库连接
16、对象后,就可以通过该连接发送SQL语句。Statement对象可以通过Connection对象中的createStatement()方法进行创建,例如:Connection con=DriverManager.getConnection(url,sa,);/取得数据库连接Statement stmt=con.createStatement();/获取Statement对象 为了执行Statement对象,被发送到数据库的SQL语句将被作为参数提供给Statement类中的指定方法。例如,通过Statement对象执行查询的SQL语句:ResultSet rs=stmt.executeQuery
17、(select*from wy_user);执行静态执行静态SQL语句接口:语句接口:Statement(3)2使用Statement对象执行SQL语句 Statement接口提供了3种执行语句的方法,如表所示。方法名称功能描述executeQuery(String sql)用于产生单个结果集的语句,例如,执行SELECT查询语句executeUpdate(String sql)用于执行INSERT、UPDATE或DELETE语句以及SQL DDL(数据定义语言)语句,例如,CREATE TABLE和DROP TABLE。INSERT、UPDATE 或 DELETE 语句的效果是修改表中零行或
18、多行中的一列或多列。executeUpdate 的返回值是一个整数,指示受影响的行数(即更新计数)。对于 CREATE TABLE 或 DROP TABLE 等不操作行的语句,executeUpdate 的返回值总为零execute(String sql)用于执行返回多个结果集、多个更新计数或二者组合的语句3SQL语句执行完成 当连接处于自动提交模式时,其中所执行的SQL语句在完成时将自动提交或还原。4关闭Statement对象 Statement对象将由Java垃圾收集程序自动关闭。返回执行预编译的执行预编译的SQL语句接口:语句接口:PreparedStatement(1)Prepared
19、Statement接口继承并扩展了Statement接口,用来执行动态的SQL语句。PreparedStatement接口包含已编译的SQL语句,并且包含于PreparedStatement对象中的 SQL语句可具有一个或多个参数。该语句为每个参数保留一个问号(?)作为占位符。每个问号的值必须在该语句执行之前,通过适当的setXXX()方法来提供。由于PreparedStatement对象已预编译过,所以其执行速度要快于Statement对象。作为Statement的子类,PreparedStatement除了继承Statement的所有功能外,还添加了一些方法,用于设置发送给数据库以取代参数
20、占位符的值。同时,execute()方法、executeQuery()方法和executeUpdate()方法已被更改,从而不再需要参数。这些方法的 Statement形式(接受SQL语句参数的形式)不应该用于PreparedStatement对象。执行预编译的执行预编译的SQL语句接口:语句接口:PreparedStatement(2)1创建PreparedStatement对象 例如,创建包含带两个参数占位符的SQL语句的PreparedStatement对象:PreparedStatement pstmt=con.prepareStatement(UPDATE wy_table SET
21、m=?WHERE x=?);2传递多参数 例如,将第一个参数设为“王”,第二个参数设为“毅”:pstmt.setString(1,“王”);pstmt.setString(2,“毅”);PreparedStatement类常用传递参数的方法如表所示。执行预编译的执行预编译的SQL语句接口:语句接口:PreparedStatement(3)方法名称描述setBoolean(int,boolean)设置一个Java boolean类型的参数值setByte(int,byte)设置一个 Java byte类型的参数值setBoolean(int,boolean)设置一个Java boolean类型的
22、参数值setBytes(int,byte)设置一个Java字节数组setBigDecimal(int,BigDecimal)设置一个java.lang.BigDecimal类型的参数值setDate(int,Date)设置一个java.sql.Date类型的参数值setDouble(int,double)设置一个Java double类型的参数值setFloat(int,float)设置一个Java float类型的参数值setInt(int,int)设置一个 Java int类型的参数值setLong(int,long)设置一个Java long类型的参数值setNull(int,int)设
23、置一个SQL语句中的NULL值setObject(int,Object)使用一个对象设置参数值;对于整数值使用和 java.lang 等价的对象setObject(int,Object,int)该方法类似于 setObject 方法,但是假设小数位数为零setObject(int,Object,int,int)使用一个对象设置参数值;对于整数值使用与 java.lang等价的对象setShort(int,short)设置一个Java short类型的参数值setString(int,String)设置一个Java String类型的参数值setTime(int,Time)设置一个java.sq
24、l.Date类型的参数值setTimestamp(int,Timestamp)设置一个java.sql.Timestamp类型的参数值setUnicodeStream(int,InputStream,int)将一个非常大的unicode值输入到longvarchar参数时可以通过 java.io.InputStream类setAsciiStream(int,InputStream,int)将一个非常大的ASCII值输入到longvarchar参数,它的参数类型是Java的输入流setBinaryStream(int,InputStream,int)将一个非常大的二进制值输入到longvarch
25、ar参数时可以通过 java.io.InputStream类执行预编译的执行预编译的SQL语句接口:语句接口:PreparedStatement(4)3执行预编译的SQL语句 设置完预编译的SQL语句后,就可以通过PreparedStatemen类中的方法执行该SQL语句。PreparedStatemen类执行SQL语句的方法如表所示。4参数中数据类型的一致性 方法名称描述execute()执行保存操作executeUpdate()执行更新或删除数据操作 setXXX()方法中的XXX是Java类型。它是一种隐含的JDBC类型(一般SQL语句类型),因为驱动程序将把Java类型映射为相应的JD
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第07章 JSP数据库核心技术 07 JSP 数据库 核心技术
限制150内