JavaTM 2 Platform
Standard Ed. 6

软件包 javax.sql

为通过 JavaTM 编程语言进行服务器端数据源访问和处理提供 API。

请参见:
          描述

接口摘要
CommonDataSource 此接口定义在 DataSourceXADataSourceConnectionPoolDataSource 之间公用的方法。
ConnectionEventListener 注册该对象便可获得由 PooledConnection 对象生成的事件的通知。
ConnectionPoolDataSource PooledConnection 对象的工厂。
DataSource 该工厂用于提供到此 DataSource 对象所表示的物理数据源的连接。
PooledConnection 为连接池管理提供钩子 (hook) 的对象。
RowSet 该接口添加了对 JavaBeansTM 组件模型的 JDBC API 支持。
RowSetInternal 为了将自身呈现给 RowSetReaderRowSetWriter 对象的 RowSet 对象实现应实现该接口。
RowSetListener 要在 RowSet 对象的生命周期内发生重要事件时得到通知的组件必须实现该接口。
RowSetMetaData 该对象包含关于 RowSet 对象的列的信息。
RowSetReader 该设施供非连接 RowSet 对象调用以填充数据行。
RowSetWriter 实现 RowSetWriter 接口的对象,称为 writer
StatementEventListener 注册为能获得 Statement 池中 PreparedStatement 上所发生事件的通知的对象。
XAConnection 为分布式事务提供支持的对象。
XADataSource 在内部使用的 XAConnection 对象的工厂。
 

类摘要
ConnectionEvent 提供关于连接相关事件的源信息的 Event 对象。
RowSetEvent RowSet 对象发生事件时生成的 Event 对象。
StatementEvent StatementEvent 被传送给所有用 PooledConnection 注册的 StatementEventListener
 

软件包 javax.sql 的描述

为通过 JavaTM 编程语言进行服务器端数据源访问和处理提供 API。此包补充了 java.sql 包,它从 1.4 版本开始包含在 Java 平台、标准版 (Java SETM) 中。它保留了 Java 平台、企业版 (Java EETM) 中的精华部分。

java.sql 包中提供以下内容:

  1. DataSource 接口,用于建立到数据源的连接,是 DriverManager 的替代项。
  2. 连接池和语句池
  3. 分布式事务
  4. Rowset

应用程序直接使用 DataSourceRowSet API,但连接池和分布式事务 API 只能由中间层基础设施在内部使用。

使用 DataSource 对象建立连接

javax.sql 包提供建立到数据源的连接的首选方式。DriverManager 类(原始机制)仍然有效,使用它的代码将继续运行。然而,与 DriverManager 机制相比,较新的 DataSource 机制更为可取,因为有更多的优点。

下面是使用 DataSource 对象建立连接的主要优点:

驱动程序提供 DataSource 实现。特定的 DataSource 对象表示特定的物理数据源,DataSource 对象创建的每个连接都是到该物理数据源的连接。

数据源的逻辑名称需要向使用 Java Naming and Directory InterfaceTM (JNDI) API 的命名服务注册,通常由系统管理员或某个执行系统管理员职责的人执行。应用程序可以通过查找注册的逻辑名称获取它需要的 DataSource 对象。然后,应用程序可以使用 DataSource 对象创建到它所表示物理数据源的连接。

DataSource 对象可以实现为与中间层设施一起使用,这样可将它生成的连接入池以供重用。使用这种 DataSource 实现的应用程序将自动获取参与连接池的连接。DataSource 对象也可以实现为与中间层设施一起使用,这样无需要任何特殊编码即可将它所生成连接用于分布式事务。

连接池和语句池

通过实现为与中间层连接池管理器一起使用的 DataSource 对象建立的连接将参与连接池。这能显著地提高性能,因为创建新连接开销很大。连接池允许使用和重用连接,因此可以极大地减少需要创建的新连接数。

连接池是完全透明的。此操作是在中间层 Java EE 配置中自动完成的,因此就应用程序而言,无需对代码进行任何更改。应用程序可以简单地使用 DataSource.getConnection 方法获取入池连接,并按使用任何 Connection 对象相同的方式使用该连接。

用于连接池的类和接口是:

连接池管理器(三层体系结构的中间层中的设施)在后台使用这些类和接口。当调用 ConnectionPoolDataSource 对象创建 PooledConnection 对象时,连接池管理器将作为 ConnectionEventListener 对象在新 PooledConnection 对象中注册。当关闭连接或发生错误时,连接池管理器(作为侦听器)获取包括 ConnectionEvent 对象在内的通知。

如果连接池管理器支持 Statement 池,则对于可以通过调用 DatabaseMetaData.supportsStatementPooling 方法确定的 PreparedStatements,连接池管理器将向新 PooledConnection 对象注册为 StatementEventListener 对象。当 PreparedStatement 关闭或者发生错误时,连接池管理器(作为一个侦听器)获取一个通知,该通知包括 StatementEvent 对象。

分布式事务

与入池连接一样,通过实现为与中间层基础设施一起使用的 DataSource 对象建立的连接可参与分布式事务。这为应用程序提供了在单个事务中占用多个服务器上的数据源的能力。

用于分布式事务的类和接口是:

这些接口由事务管理器使用;应用程序不直接使用它们。

XAConnection 接口是从 PooledConnection 接口派生的,因此适用于入池连接的内容也适用于作为分布式事务一部分的连接。中间层中的事务管理器透明地处理所有动作。应用程序代码中的唯一变化是,应用程序不能执行任何与事务管理器对事务的处理有冲突的操作。更明确地说,应用程序不能调用方法 Connection.commitConnection.rollback,并且它不能将连接设置为自动提交模式(即它不能调用 Connection.setAutoCommit(true))。

应用程序不必为参与分布式事务而执行任何特殊操作。它只需要通过 DataSource.getConnection 方法创建到所需的数据源的连接,就跟它通常的做法一样。事务管理器在后台管理事务。XADataSource 接口创建 XAConnection 对象,每个 XAConnection 对象创建事务管理器用于管理连接的 XAResource 对象。

Rowset

RowSet 接口在后台与各种其他类和接口一起使用。RowSet 可分为三个类别。
  1. 事件通知

  2. 元数据
  3. Reader/Writer 设施
    实现 RowSetInternal 接口的 RowSet 对象可以调用与之关联的 RowSetReader 对象来填充数据。它还可以调用与之关联的 RowSetWriter 对象将对其行所做的任何更改写回数据源,它的行最初便是从该数据源获取的。保持连接到其数据源的 rowset 不需要使用 reader 和 writer,因为它可以直接对数据源进行操作。

RowSet 接口可以使用多种方式实现,任何人都可以编写实现。鼓励开发人员充分发挥想象力,探索使用 rowset 的新方式。

重要注意事项:对于使用标记有 "Since 1.6" 的 API,必须使用实现 JDBC 4.0 API 的 JDBC 技术驱动程序才能运行。必须检查驱动程序文档,以确保它实现了所需使用的特定功能。

包规范

相关文档

由 Addison-Wesley Longman 出版的 Java 系列书提供关于 javax.sql 包中的类和实现的详细信息:

从以下版本开始:
1.4

JavaTM 2 Platform
Standard Ed. 6

提交错误或意见

版权所有 2008 Sun Microsystems, Inc. 保留所有权利。请遵守GNU General Public License, version 2 only