java程序设计教程 第11章.ppt





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

限制150内