2007年5月22日

第四章    概述

JDBC应用程序接口为Java编程语言访问一个或多个数据源提供了一种途径。在大多数情况下,数据源是用SQL访问的关系数据库管理系统。尽管如此,支持JDBC技术的驱动程序也可以访问其他的数据源,包括遗留文件系统(legacy file systems)和面向对象的系统。JDBC应用程序接口的一个主要动机就是为应用程序可以访问广泛的数据源提供标准的应用程序接口(API)

这一章介绍了一些JDBC应用程序接口的关键概念。除此之外,还描述了JDBC应用程序的两种运行环境,以及讨论了不同的功能角色在每个运行环境中是怎样被实现的。两层和三层逻辑结构能够在大量的物理结构上被实现。

4.1建立一个连接

JDBC应用程序接口定义了Connection接口来表示一个到潜在数据源的连接。

在典型情况下,JDBC应用程序会用两种方式中的一种来连接到目标数据源:

         DriverManager —— 这个被充分实现的类在最初的JDBC1.0应用程序接口中介绍过,它需要应用程序装载一个特定的驱动,这一驱动使用硬编码的统一资源定位器(URL)

         DataSource —— 这个接口在JDBC2.0可选包应用程序接口(Optional Package API)中介绍过。与DriverManager相比它被作为首选,因为他允许潜在数据源的细节对应用程序透明。一个DataSource对象的属性被设置以后可以表示一个特定的数据源。当它的getConnection方法被调用以后,Datasource的实例将会返回一个到数据源的连接。应用程序可以通过改变Datasource对象的属性来连接到不同的数据源,而不需要改变应用程序的代码。同样的,一个DataSource可以在不改变使用它的应用程序的代码的前提下被改变。

JDBC应用程序接口还定义了DataSource接口的两个重要扩展来支持企业级的应用程序。这些扩展就是以下的两个接口:

         ConnectionPoolDataSource —— 支持物理连接高速缓冲和重用,物理连接改善了应用程序的性能和可伸缩性。

       XADataSource —— 提供了在分布式事务中可共享的连接。

4.2执行SQL表达式以及操作结果集

一旦一个连接被建立,那么使用这个连接的应用程序就可以用JDBC应用程序接口对目标数据源进行查询和更新。JDBC3.0应用程序接口提供了对大多数实现了的SQL99特性的支持。因为不同的厂商都在不同的级别支持这些特性,而JDBC应用程序接口则包括了DatabaseMetadata接口。应用程序能够使用此接口来确定它们使用的数据源是否支持某一特性。JDBC应用程序接口还定义了转义语法使得应用程序可以访问非标准的厂商定义的特性。转义语法的优点是可以使得JDBC应用程序能够像本地应用程序一样访问相同的特性,而同时又能够保证应用程序的可移植性。

应用程序使用Connection接口中的方法来定义事务的属性和创建StatementPreparedStatementCallableStatement对象。这些表达式被用来执行SQL表达式和检索结果集。ResultSet接口封装SQL的查询结果。表达式也可以被批量执行,即允许应用程序向数据源提交多条更新语句作为执行的单个单元。

JDBC应用程序接口用RowSet接口扩展了ResultSet接口,从而为列表数据提供了一个容器,而这样比标准结果集更加通用。一个Rowset对象是一个JavaBeans™组件,它可以在没有连接到数据源的情况下对它进行操作。例如,一个RowSet可以被串行化,因此也可以在网络之间被传输,这对那些想不需要JDBC驱动和数据源连接而对表格数据进行操作的小型客户端是非常有用的。RowSet的另一个特性是能够包含一个阅读器来访问任意表格形式的数据,而不仅仅是关系数据库中的数据。更进一步的,一个RowSet对象可以在当它与数据源失去连接的时候更新它的行。它可以包含一个记录器,把那些更新写回到潜在的数据源。

4.2.1      支持SQL高级数据类型

JDBC应用程序接口定义了标准的从SQL数据类型到JDBC数据类型的映射。这包括对SQL99高级数据类型的支持,诸如BLOBCLOBARRAYREFSTRUCTDISTINCTJDBC驱动也可以为用户定义类型(UDTs)实现一个或多个自定义类型映射。在这个映射中,用户定义类型(UDT)被映射到一个Java类中。JDBC3.0应用程序接口还添加了对外部数据管理的支持,例如一个在数据源外部的文件中的数据。

4.3两层结构模型

一个两层结构模型按功能可以被划分为客户端层和服务器层,见图4-1



4-1 两层结构模型

客户端层包括了应用程序和一个或多个JDBC驱动,应用程序负责对以下职责进行处理:

        表现层逻辑

         业务逻辑

         对多重事务和分布式事务的管理

         资源管理

在这个模型中,应用程序直接与JDBC驱动交互,包括建立和管理物理连接以及处理潜在的特定的数据源的细节。应用程序可以采用特殊的实现采用不标准的特性或性能调整的优点。

这个模型的一些缺点包括:

         伴随着基础结构和系统级的功能使得表现层逻辑和业务层逻辑不能分离。这就为使用一个好的体系结构来编写可维护性好的产品代码带来了困难。

         因为采用了特定的数据库实现,降低了应用程序的可移植性。而那些要求连接到多个数据库的应用程序必须知道不同厂商的数据库之间的差异。

         限制了可伸缩性。通常地,应用程序在结束之前将保持一个或多个到数据库的物理连接,这样就限制了它支持并发应用程序的数量。在这个模型中,性能,可伸缩性和可用性受到JDBC驱动和相应的数据源的限制。如果一个应用程序采用了多个驱动,它也可能需要知道每种驱动和数据源解决这些限制的不同方法。

4.4三层结构模型

三层模型结构为业务逻辑和基础结构引入了中间层服务器,见图4-2


 

4-2 三层结构模型

这个体系结构被设计来为企业级的应用程序提高性能,可伸缩性和可用性。三个层的功能分别为:

1、                客户端层 —— 为程序和人的交互实现表现层逻辑的一个层。Java程序,浏览器和掌上电脑(PDAs)是常见的客户端实例。客户端与中间层应用程序交互而且不需要包含任何与基础结构和数据源相关的功能。

2、                中间层服务器 —— 中间层包括:

        和客户端以及业务逻辑层交互的应用程序。如果该应用程序能够与数据源交互,和低级的驱动应用程序接口相比,他将更多地处理像DataSource对象和逻辑连接这些高级抽象。

         为广泛的应用程序提供基础的应用程序服务器。这包括管理和共享物理连接、事务管理和屏蔽不同JDBC驱动之间的差异。最后一点使得编写可移植性良好的应用程序更加简单。J2EE服务器可以实现应用程序服务器这一角色。应用程序服务器可以实现被应用程序所使用的高级抽象和直接与JDBC驱动交互。

       JDBC驱动提供到潜在数据源的连接。每个驱动程序在它所使用的数据源所支持的特性基础上实现标准的JDBC应用程序接口。驱动层可以屏蔽标准SQL99语法和数据源所支持的本地语法之间的差异。如果数据源不是一个关系数据库管理系统,那驱动程序则使用应用程序服务器实现关系层。

3、                潜在数据源 —— 即数据驻留层。它包括关系型数据库管理系统,遗留文件系统(legacy file systems),对象型数据库管理系统,数据仓库,电子表格或者其他形式的数据。唯一的要求就是有相应的支持JDBC应用程序接口的驱动程序。

4.5在J2EE平台中的JDBC

    J2EE组件,例如JavaServer™ PagesServlets和企业级Java Beans™EJB™)组件,常常需要使用JDBC应用程序接口来访问关系型数据。当J2EE组件使用了JDBC应用程序接口以后,那么可以使用相应的容器来管理它们的事务和数据源。这意味着J2EE组件开发人员可以不直接使用JDBC应用程序接口的事务管理和数据源管理的工具。具体细节请参考J2EE平台规范。

posted @ 2007-05-22 21:18 LittleBug 阅读(545) | 评论 (0)编辑 收藏

第三章 新特性概述
3.1变化

JDBC3.0在以下领域有所改变:

     保存点(Savepoint)支持

添加了保存点接口,此接口包含了新的方法来对一个指定的保存点进行设置,释放或者回滚事务。

      通过连接池重用预处理语句(Prepared Statments)

为部署者提供了通过连接来控制预处理语句怎样被共享和重用的能力。

     配置连接池

ConnectionPoolDatasource接口定义了大量属性。这些属性能够描述通过Datasource对象创建的PooledConnection对象怎样被共享。

     对参数元数据的检索

添加了ParameterMetadata接口,此接口描述了预处理语句(Prepared Statements)的参数个数,类型和属性。

   对自动产生键的检索

添加了从那些能够自动产生值的列来检索值的手段。

     打开多个结果集(ResultSet)对象的能力

添加了getMoreResults(int)这一方法,此方法提供了一个参数,这一个参数定义了Statement对象返回的ResultSet对象在返回任何并发的ResultSet对象之前是否应该被关闭。

     通过名字向CallableStatment对象传递参数

添加了一个新方法,此方法可以通过一个字符串来标识CallableStatement对象的参数。

     对可控制游标的支持

添加了指定ResultSet对象的可控制游标的能力。

     布尔数据类型

添加了数据类型java.sql.Types.BOOLEANBOOLEANBIT是在逻辑上等价的。

     BlobClob对象中的数据进行内部更新

添加了新的方法允许BlobClob对象包含的数据被改变。

     检索和更新被Ref对象引用的对象

添加了新的方法来检索被Ref对象引用的对象。也添加了更新被Ref对象引用的对象的能力。

     更新包含BLOB,CLOB,ARRAYREF类型的列

ResultSet接口添加了updateBlobupdateClobupdateArrayupdateRef方法。

     DATALINK/URL数据类型

添加了新的数据类型java.sql.Types.DATALINK,允许JDBC驱动存储和检索对外部数据的引用。

     转化组(Transform groups)和类型映射

描述了转化组的作用和在元数据中这一作用是怎样被反映的。

     JDBC SPI(服务提供者接口)和连接器体系结构的关系

在第19章“和连接器的关系”中描述了JDBC SPI和连接器体系结构的关系。

     数据库元数据(DatabaseMetadata) APIs

为了检索SQL类型体系添加了元数据。具体细节参见此规范。

参见第五章“类和接口”中受到这些改变的影响的类和接口的清单。

posted @ 2007-05-22 21:14 LittleBug 阅读(344) | 评论 (0)编辑 收藏

第二章 目标

JDBC应用程序接口是成熟的技术,它早在19971月就被提出。在它最初发行的时候,JDBC应用程序接口注重于提供一个基本的调用级的到SQL数据库的接口。而JDBC2.1规范和2.0可选择包规范则扩展了JDBC的范围。这两个规范包括了对更多高级应用程序的支持和使用JDBC应用程序接口的应用程序服务器为了运行于它们之上的应用程序的性能所要求的新特性的支持。

JDBC3.0规范的总体目标是补上那些在很少方面的功能缺失。以下的清单列出了JDBC以及JDBC3.0所特有的目标和设计原理:

1、 适合J2EEJ2SE平台

JDBC应用程序接口是Java平台的组成技术。因此,JDBC3.0应该和Java2企业版和Java2标准版的总体方向保持一致。

2、 SQL99保持一致

JDBC应用程序接口提供了从Java编写的应用程序到标准SQL的编程访问。在JDBC2.0开发的过程中,SQL99规范还处在一种变化不定的情况下。现在SQL99规范是一个公开的标准,它包括了被数据库管理系统厂商广泛支持的以及那些被很少厂商支持的特性。JDBC3.0的目标就是实现SQL99中那些极可能在将来五年里会被广泛支持的特性的子集。

3、 合并之前版本的规范

此规范合并了之前三版JDBC规范以提供一份独立的关于JDBC应用程序接口的规范。

4、 提供厂商中立的对普通特性的访问

JDBC应用程序接口努力实现对被不同厂商普遍支持的特征的高性能的访问。目标是在一定程度上提供本地应用程序能完成的对特性的访问。因此,JDBC应用程序接口必须足够全面和灵活以顾及大量的实现方式。

5、 继续保持对SQL的注重

JDBC应用程序接口一直注重于从Java编程语言到关系型数据的访问。JDBC3.0将继续注重于这一点。JDBC3.0不排除和其它技术交互,包括XMLCORBA和非关系型数据,但是最主要的目标将仍然是和关系型数据和SQL交互。

6、 为工具和更高层的应用程序接口提供基础

JDBC应用程序接口提供标准的应用程序接口来访问广泛的数据源或者保留系统(Legacy Systems)。通过JDBC应用程序接口的抽象,实现方式的不同之处也变得透明了。这使得JDBC对于那些想生产轻便工具和应用程序的厂商来说,是一个不可多得的目标平台。

因为JDBC是一个从Java编程语言到SQL的调用级的接口,所以,JDBC应用程序接口也适合作为那些像EJB2.0容器管理持久和SQLJ(注:SQLJ是一个与Java编程语言紧密集成的嵌入式SQL版本)这些高级程序的基础。

7、 保持它的简单

JDBC应用程序接口被设计为简单易懂的接口,但是通过它能够编写更复杂的实体。这一目标是通过定义许多简洁,拥有单一功能的方法来代替通过标志参数控制的少量的复杂而拥有多功能的方法来实现的。

8、 增强可靠性、实用性和灵活性

可靠性、实用性和灵活性是J2EEJ2SE平台的主题,也是Java平台未来的方向。JDBC3.0应用程序接口通过增强对若干领域的支持体现了这些主题,这些领域包括资源管理,通过逻辑连接重用预处理语句(prepared statements)以及错误处理。

9、 保留对现有应用程序和驱动程序的向后兼容性

现有的支持JDBC技术的驱动和使用这些驱动的应用程序在支持JDBC3.0Java虚拟机上必须能够继续工作。对于那些只使用了先前版本的JDBC应用程序接口的特性,但是没有使用JDBC2.0反对的特性的应用程序,将不需要任何改变而正常运行。现有的应用程序移植到JDBC3.0技术上是件简单的事情。

10、允许对连接器的向前兼容

连接器的体系结构定义了一个标准的方法来打包和部署资源适配器。这使得J2EE容器可以通过外部资源集成连接器的连接、事务和安全管理。

JDBC3.0应用程序接口提供了从JDBC驱动程序移植到连接器体系的途径。这使得那些使用JDBC技术的产品的厂商更多地转移到使用连接器应用程序接口(Connector API)成为可能。希望这些厂商会在他们现有的数据源工具上写上“资源管理器封装”,这样这些工具就能够在连接器框架中被重用。

11、 清楚地规定需求

JDBC规范的需求应该是明确的和容易识别的。JDBC3.0规范和Javadoc文档规定了哪些特性是必需 的,而哪些特性是可选的。

posted @ 2007-05-22 21:12 LittleBug 阅读(552) | 评论 (0)编辑 收藏

第一章 绪论

1.1   JDBC应用程序接口

JDBC™应用程序接口提供了从Java™编程语言编程访问关系数据的能力。通过使用JDBC应用程序接口,Java编程语言写的应用程序能够执行SQL表达式,检索结果集和把改变传回潜在的数据源。JDBC应用程序接口还可以和在分布式的、异源的环境中的多种数据源进行交互。

JDBC应用程序接口基于X/Open SQL CLIODBC也是建立在此基础上。JDBC提供了从Java编程语言到X/Open CLISQL标准定义的抽象和概念的自然、简单的映射。

自从19971月被提出,JDBC应用程序接口就被广泛接受和实现。它的灵活性考虑到了大量的实现方式。

1.2   平台

JDBC应用程序接口是Java平台的一部分,Java平台包括了Java™2标准版(J2SE™)和Java2™企业版(J2EE™)。JDBC3.0被分成了两个包:java.sqljavax.sql。这两个包都被包括到了J2SEJ2EE平台中。

1.3 目标读者

此规范主要面向以下几类产品的厂家:

     实现JDBC应用程序接口的驱动程序

     提供驱动层以上的中间层服务的应用程序服务器

     使用JDBC应用程序接口提供服务的工具,如应用程序生成器

       此规范也打算为以下目的服务:

     在他们的程序中使用JDBC应用程序接口的最终用户的一份说明书

     开发基于JDBC应用程序接口的其它应用程序接口的程序员的一个起点

1.4   感谢

作者要感谢以下专家组成员,因为他们为此规范做出了宝贵的贡献:

      ElhamChandler, Informix

      Stefan Dessloch, IBM

      John Goodson, Merant

      Jay Hiremath, Bluestone

      Viquar Hussain, Inprise

      Prabha Krishna, Oracle

      Scott Marlow, Silverstream

      Kuldip Pathak, Informix

      David Schorow, Compaq

      Yeh-Heng Sheng, Informix

      Mark Spotswood, BEA

      Satish Viswanatham, iPlanet

       Maydene Fisher 曾经很有耐心地把我们写的东西翻译成英语。

       Jennifer Ball 也从书写方式转变成为我们所希望的用图表表示的方式来表达。

       Graham Hamilton, Rick Cattell, Mark Hapner, Seth White以及许多其他曾经为JDBC技术工作的人

       使此规范的出版成为可能。

posted @ 2007-05-22 21:10 LittleBug 阅读(375) | 评论 (0)编辑 收藏