java程序设计教程第11章.ppt
《java程序设计教程第11章.ppt》由会员分享,可在线阅读,更多相关《java程序设计教程第11章.ppt(96页珍藏版)》请在三一办公上搜索。
1、,第11章 数据库编程,11.1 JDBC技术简介 11.2 JDBC的结构 11.3 JDBC驱动程序的类型 11.4 JDBC在数据库访问中的应用 11.5 JDBC综合应用示例 本章小结 习题,11.1 JDBC技术简介JDBC(Java DataBase Connectivity)是Java语言为了支持SQL功能而提供的与数据库相连的用户接口。JDBC中包括了一组由Java语言编写的接口和类,都独立于特定的DBMS,或者说它们可以和各种数据相关联,即独立于数据库管理系统DBMS的应用提供了能与多个不同数据库连接的通用接口。这对于数据库程序来说,想要访问多种数据库,只需要一个统一的接口就
2、可以实现。,在Java中JDBC提供了Java访问数据库平台统一的API。JDBC实际上就是由Java实现的数据库访问中间件。程序员可以通过JDBC向各种关系型数据库发送SQL语句,只需要使用JDBC提供的几个类(对象)或接口即可,而不必为不同的数据库编写不同的程序。有了JDBC以后,对于数据库编程,程序员只需要在Java语言中使用SQL语言,使Java应用程序或Java Applet实现对分布在网络上的各种数据库的访问,而不用考虑底层具体DBMS的连接和访问过程。,JDBC由一组Java语言编写的接口和类组成,使用内嵌式的SQL,主要实现三大功能:(1)建立与数据库的连接;(2)执行SQL声
3、明,向数据库发送SQL语句;(3)处理数据库返回的SQL执行结果。,JDBC支持基本的SQL功能,使用它可以方便地与不同的关系数据库建立连接,进行相关操作,无须再为不同的DBMS分别编写程序。JDBC是一种底层API,意味着它将直接调用SQL命令,同时也是构造高层API和数据库开发工具的基础。高层API和数据库开发工具应该使用户界面更加友好,使用更加方便和易于理解。不过所有这样的API最终将被翻译为像JDBC这样的底层API。两种基于JDBC的高层API,一种是SQL语言嵌入Java的预处理器,另一种是实现从关系数据库到Java类的直接映射,目前都正处于开发阶段。,由于JDBC带来的便捷,越来
4、越多的程序员已经开始利用JDBC为基础的工具进行开发,使开发工作更加容易。而程序员同时也正在开发让最终用户更加容易访问数据库的应用程序,Java程序通过JDBC访问数据库的关系如图11-1所示。,图11-1 Java程序通过JDBC访问数据库,11.2 JDBC的结构11.2.1 JDBC APIJDBC API是面向程序员的,Java程序员通过调用此API可以实现连接数据库,执行SQL语句并返回结果集。JDBC API主要由一系列的接口定义所构成,主要的接口如表11-1所示。,11.2.2 JDBC Driver API面向底层的JDBC Driver API 主要是针对数据库厂商开发数据库
5、底层驱动程序使用的,一般情况下用于开发应用程序的程序员用不到这些类库。Java的应用程序员通过SQL包中定义的一系列抽象类对数据库进行操作,而实现这些抽象类并完成实际操作,则是由数据库驱动器Driver运行的,最终保证Java程序员通过JDBC实现对不同数据库的操作。其结构如图11-2所示。,图11-2 JDBC Driver API结构图,11.3 JDBC驱动程序的类型目前比较常见的JDBC驱动程序可分为以下四种。1JDBC-ODBC和ODBC驱动程序这种驱动器通过ODBC驱动器提供数据库连接。JDBC在设计上和ODBC很类似,JDBC和数据库的连接方法之一是先建立起一个JDBC-ODBC
6、桥接器。由于微软产品ODBC驱动程序已经被广泛应用,因此建立这种桥接器后,JDBC就有能力访问各种类型的数据库。使用这种驱动器,要求每一台客户机都要装入ODBC的驱动器。,2Native-API partly-Java Driver/本地API这种驱动方式将数据库厂商的特殊协议转化成Java代码以及二进制类码,使Java数据库客户与数据库服务器通信。各客户机使用的数据库可能各不相同,需要在客户机上装有相应DBMS的驱动程序。,3JDBC网络纯Java驱动程序这种驱动程序将JDBC指令转化成独立于DBMS的网络协议形式,再由服务器转化为特定DBMS的协议形式。这种网络服务器中间件能够将它的纯Ja
7、va客户机连接到多种不同的数据库上。有关DBMS的协议由各数据库厂商决定。这种驱动器可以连接到不同的数据库上,是最为灵活的JDBC驱动程序。将来也许所有这种解决方案的提供者都能提供适合于Intranet用的产品。为了使这些产品也支持广域网存取,它们必须处理Web所提出的安全性、通过防火墙的访问等方面的要求。目前一些厂商已经开始将JDBC驱动程序加到他们现有的数据库中间件产品中。,4本地协议纯Java驱动程序这种类型的驱动程序将JDBC调用直接转换为DBMS所使用的网络协议。这相当于客户机直接与服务器联系,是Intranet访问的一个很实用的解决方法。以上四种驱动程序中,后两种都是纯Java d
8、river,相对效率更高,更具有通用性;但前两种比较容易获得,使用比较普遍一些。,11.4 JDBC在数据库访问中的应用JDBC与Acess、SQL Server、Oracle等各种数据库的连接,首先需要准备相应的运行环境,本例采用JDK1.5.0作为开发工具,使用Eclipse 3.2集成开发环境,可以提供一些演示功能。操作系统最好是Windows 2000或者Windows XP,并装好至少一种数据库。一个基本的JDBC程序开发编程步骤主要包含以下7步:,(1)引入相应的类和包(import java.sql.*)。(2)加载合适的JDBC驱动程序(Load the Driver)。(3)
9、连接数据库(Connect to the DataBase)。(4)执行SQL语句(Execute the SQL):Connection.CreateStatement();.executeQuery();.executeUpdate()。,(5)从取得的ResultSet对象中获取结果(Retrieve the result data)。(6)将数据库中各种类型转换为Java中的类型,通过getXXX 方法(Show the result data)。(7)关闭(Close):close the resultset对象;close the statement对象;close the con
10、nection对象。下面按照JDBC编程步骤详细介绍JDBC在数据库访问中的应用。,11.4.1 建立与数据库的连接1设置数据源在数据库连接之前需要加载相应的数据源(采用JDBC-ODBC和ODBC驱动程序)。下面以SQL Server数据库为例简要说明如何设置数据源。一般是在控制面板的管理工具中打开ODBC项,出现ODBC数据源管理器对话框,然后选择User DSN选项卡,单击Add按钮,选择想为其安装数据源的驱动程序,并点击完成,接着会出现创建到SQL Server的新数据源,如图11-3所示。按照此向导一步步往下操作,直到数据源配置成功,具体步骤将在11.5节里详细介绍。,图11-3 设
11、置数据源,2引入相应的类和包任何使用JDBC的源程序都需要输入java.sql包,即import java.sql.*,必要的时候还需要装载相应的JDBC-ODBC驱动程序的包,如import sun.jdbc.odbc.JdbcOdbcDriver。然后声明如下的对象:ResultSet rs=null;Connection conn=null;Connection代表和数据库的连接,连接过程包括所执行的SQL语句和该连接上返回的结果,3装载驱动程序与数据库连接之前还需要装载驱动程序。一般常用的是Class.forName()方法显示装载驱动,如果采用JDBC-ODBC和ODBC驱动程序,用
12、下列代码装载:Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);Class是java.lang包中的一个类,该类通过调用它的静态方法forName就可以建立JDBC-ODBC桥接器。执行该代码将装载驱动,并且在装载时,驱动将自动向JDBC注册自己。使用Class.forName()方法可能抛出异常,因此在驱动程序类有可能不存在时,需要捕获这个异常,标准是:,try/注册数据库Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);/捕获异常catch(Java.lang.ClassNotFoundException e)
13、System.err.println(e.getMessage();,4连接到数据库与数据库建立连接的标准方法是调用DriverManager.getConnection,该方法接受含有某个url的字符串。DriverManager类是JDBC管理层,尝试找到可与指定url所代表的数据库进行连接的驱动程序如下:String url=“jdbc:odbc:数据源名字”;Connection conn=DriverManager.getConnection(url,数据源登录名,数据源登录密码);,第一条语句定义了一个字符串变量,变量内容是一种JDBC连接所特定的URL。JDBC URL的标准语法
14、是:jdbc:子协议:子名称,其中JDBCURL中协议总是jdbc。如果采用JDBC-ODBC桥驱动,JDBC URL以jdbc:odbc开始,余下URL通常是数据源名字或数据库系统。例如使用ODBC存取名为library的ODBC数据源,JDBCURL是jdbc:odbc:library。第二条语句通过调用getConnection方法创建与数据库的连接,并返回一个Connection对象。,11.4.2 执行查询语句与数据库建立连接成功后,就可以向所建立连接的数据库传送SQL语句,其中JDBC对能够被发送的SQL语句类型不加任何限制。在和数据库建立连接后,使用三种对象Statement、P
15、reparedStatement和CallableStatement查询数据库。在建立了SQL对象后,这个对象就可以调用相应的方法实现对数据库的查询和修改,并将查询结果存放在一个ResultSet类声明的对象中,也就是说,SQL语句对数据库的查询操作将返回一个ResultSet对象。,1StatementStatement对象实现对数据库的一般查询功能,在JDBC里面可采用Statement对象来实现发送SQL语句到数据库。Statement对象可把简单查询语句发送到数据库,允许执行简单的查询。,(1)创建对象。首先创建一个Statement对象,它封装代表要执行的SQL语句,并执行SQL语句
16、以返回一个ResultSet对象,通过Connection类中的createStatement()方法来实现。对象执行后得到正确的结果:Statement stmt=con.createStatement();,(2)执行SQL查询语句,查询数据库中的数据。Statement接口有三个查询方法:executeQuery()、executeUpdate()和execute()。executeQuery()方法执行简单的选择查询,例如SELECT语句。executeQuery的参数是String对象,返回的是一个ResultSet类的对象。executeUpdate()方法执行SQL的UPDATE
17、、INSERT或DELETE语句,返回整数值,并给出受查询影响的行数。,execute()方法中execute 用于执行返回多个结果集、多个更新计数或二者组合的语句,一般不需要此功能,如:ResultSet rs=stmt.executeQuery(“Select*from Student_info”);stmt.executeUpdate(update Student_info set age=20 where name=张杰);,2PreparedStatementPreparedStatement对象实现预编译方式执行SQL语句,由于Statement对象在每次执行SQL语句时都将该语句
18、传给数据库,如果需要多次执行同一条SQL语句,就将导致执行效率特别低,此时可以采用PreparedStatement对象来封装SQL语句。Prepared对象可以将SQL语句传给数据库作预编译,以提高执行速度。另外,PreparedStatement对象允许执行参数化的查询,可以用不同的输入参数来多次执行编译过的语句。,(1)创建PreparedStatement对象:PreparedStatment pstmt=con.prepareStatement(“Select*from 学生信息表”);(2)执行查询语句:ResultSet rs=pstmt.exectueQuery();该条语句可
19、以多次被执行,3CallableStatementCallableStatement对象主要用于执行数据库中的存储过程。存储过程是数据库已经存在的SQL查询语句,执行存储过程的结果同执行相应的SQL语句是一样的。,(1)创建CallableStatement对象,一般格式为“call procedurename()”,是不带输入参数的存储过程,其中procedurename是存储过程的名称。带输入参数的存储过程为“call procedurename(?,?)”。而带输入参数并有返回结果参数的存储过程为“?=call procedurename(?,?,.)”。例如:CallableState
20、ment cstmt=con.prepareCall(call Query1();,(2)执行存储过程。CallableStatement类是PreparedStatement类的子类,可以使用在PreparedStatement类及Statement类中的方法。因此执行存储过程可调用executeQuery()方法来实现,如:ResultSet rs=cstmt.executeQuery();,4ResultSet执行完毕SQL语句后,将返回一个ResultSet类的对象,它包含所有的查询结果,也就是将查询结果封装在ResultSet对象中。ResultSet实际上是一张表示数据库结果集的数
21、据表,通常通过执行查询数据库的语句生成。,ResultSet类的对象方式依赖于光标(Cursor)的类型,对Resultset对象的处理必须逐步进行,而对每一行中的各个列可以按任何顺序进行处理。ResultSet对象具有指向其当前数据行的光标。最初,光标被置于第一行之前。next()方法将光标移动到下一行,因为该方法在 ResultSet对象没有下一行时返回 false,所以可以在while循环中使用它来迭代结果集。ResultSet对象通过getXXX()方法来获得某一列的数据,这里XXX代表列的数据类型,如getInt()、getString()、getDate()等。其中getXXX(i
22、nt cn)中cn指结果集中的列号,getXXX(String colName)中colName代表列名。,例如:Statement stmt=con.creatStatement();ResultSet rs=stmt.executeQuery(Select*from 学生信息表);while(rs.next()String name=rs.getString(student_name);,5查询数据库示例以下是通过JDBC连接SQL Server 2000数据库进行数据库查询的示例。首先创建Statement对象,接着执行SQL语句,查询表dept_info中的信息,然后返回一个Resul
23、tSet类的对象,包含查询到dept_info表中deptno和deptname的数据。其中数据库library中dept_info表的数据如图11-4所示。,图11-4 dept_info表,查询数据库中的数据首先要建立和数据库的连接。本例采用本地协议纯Java驱动程序,不需要数据源的设置。建立和数据库的连接步骤如下:(1)下载SQL Sever 2000的驱动程序包,这个可以从微软的网站上下载(http:/FilesMicrosoft SQL Server 2000 Driver for JDBC。其中lib目录下的三个.jar文件即是JDBC驱动核心,即msbase.jar、mssqls
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 程序设计 教程 11

链接地址:https://www.31ppt.com/p-6510008.html