|
|||||||||
软件包 javax.sql
为通过 JavaTM 编程语言进行服务器端数据源访问和处理提供 API。请参见:
描述
接口摘要 | |
---|---|
ConnectionEventListener | 注册该对象便可获得由 PooledConnection 对象生成的事件的通知。 |
ConnectionPoolDataSource | PooledConnection 对象的工厂。 |
DataSource | 该工厂用于提供到此 DataSource 对象表示的物理数据源的连接。 |
PooledConnection | 为连接池管理提供挂钩的对象。 |
RowSet | 该接口添加了对 JavaBeansTM 组件模型的 JDBC API 支持。 |
RowSetInternal | 为了将自身呈现给 RowSetReader 或 RowSetWriter 对象的 RowSet 对象实现应实现该接口。 |
RowSetListener | 要在 RowSet 对象的生命周期内发生重要事件时得到通知的组件必须实现该接口。 |
RowSetMetaData | 该对象包含关于 RowSet 对象的列的信息。 |
RowSetReader | 该设施供非连接 RowSet 对象调用以填充数据行。 |
RowSetWriter | 实现 RowSetWriter 接口的对象,称为 writer。 |
XAConnection | 为分布式事务提供支持的对象。 |
XADataSource | 在内部使用的 XAConnection 对象的工厂。 |
类摘要 | |
---|---|
ConnectionEvent | 提供关于连接相关事件的源信息的 Event 对象。 |
RowSetEvent | RowSet 对象发生事件时生成的 Event 对象。 |
软件包 javax.sql 的描述
为通过 JavaTM 编程语言进行服务器端数据源访问和处理提供 API。此包补充了 java.sql
包,它从 1.4 版本开始包含在 JDK 中。它保留了 Java 2 SDK 企业版 (J2EETM) 中的精华部分。
java.sql
包中提供以下内容:
DataSource
接口,用于建立到数据源的连接,是DriverManager
的替代项。- 连接池
- 分布式事务
- Rowset
应用程序直接使用 DataSource
和 RowSet
API,但连接池和分布式事务 API 只能由中间层基础设施在内部使用。
使用 DataSource
对象建立连接
javax.sql
包提供建立到数据源的连接的首选方式。DriverManager
类(原始机制)仍然有效,使用它的代码将继续运行。然而,与 DriverManager
机制相比,较新的 DataSource
机制更为可取,因为有更多的优点。
下面是使用 DataSource
对象建立连接的主要优点:
- 应用程序不必硬编码驱动程序类。
- 可以对数据源的属性进行更改,这意味着当数据源或驱动程序发生更改时,不必更改应用程序代码。
- 通过已实现为与中间层基础设施一起使用的
DataSource
对象,可获得连接池和分布式事务。通过DriverManager
建立的连接不具有连接池或分布式事务功能。
驱动程序提供 DataSource
实现。特定的 DataSource
对象表示特定的物理数据源,DataSource
对象创建的每个连接都是到该物理数据源的连接。
数据源的逻辑名称需要向使用 Java Naming and Directory InterfaceTM (JNDI) API 的命名服务注册,通常由系统管理员或某个执行系统管理员职责的人执行。应用程序可以通过查找注册的逻辑名称检索它需要的 DataSource
对象。然后,应用程序可以使用 DataSource
对象创建到它所表示物理数据源的连接。
DataSource
对象可以实现为与中间层设施一起使用,这样可将它生成的连接入池以供重用。使用这种 DataSource
实现的应用程序将自动获取参与连接池的连接。DataSource
对象也可以实现为与中间层设施一起使用,这样无需要任何特殊编码即可将它所生成连接用于分布式事务。
连接池
通过实现为与中间层连接池管理器一起使用的DataSource
对象建立的连接将参与连接池。这能显著地提高性能,因为创建新连接开销很大。连接池允许使用和重用连接,因此可以极大地减少需要创建的新连接数。
连接池是完全透明的。此操作是在中间层 J2EE 配置中自动完成的,因此就应用程序而言,无需对代码进行任何更改。应用程序可以简单地使用 DataSource.getConnection
方法获取入池连接,并按使用任何 Connection
对象相同的方式使用该连接。
用于连接池的类和接口是:
ConnectionPoolDataSource
PooledConnection
ConnectionEvent
ConnectionEventListener
ConnectionPoolDataSource
对象创建 PooledConnection
对象时,连接池管理器将作为 ConnectionEventListener
对象在新 PooledConnection
对象中注册。当关闭连接或发生错误时,连接池管理器(作为侦听器)获取包括 ConnectionEvent
对象在内的通知。
分布式事务
与入池连接一样,通过实现为与中间层基础设施一起使用的DataSource
对象建立的连接可参与分布式事务。这为应用程序提供了在单个事务中占用多个服务器上的数据源的能力。
用于分布式事务的类和接口是:
XADataSource
XAConnection
XAConnection
接口是从 PooledConnection
接口派生的,因此适用于入池连接的内容也适用于作为分布式事务一部分的连接。中间层中的事务管理器透明地处理所有动作。应用程序代码中的唯一变化是,应用程序不能执行任何与事务管理器对事务的处理有冲突的操作。更明确地说,应用程序不能调用方法 Connection.commit
或 Connection.rollback
,并且它不能将连接设置为自动提交模式(即它不能调用 Connection.setAutoCommit(true)
)。
应用程序不必为参与分布式事务而执行任何特殊操作。它只需要通过 DataSource.getConnection
方法创建到所需的数据源的连接,就跟它通常的做法一样。事务管理器在后台管理事务。XADataSource
接口创建 XAConnection
对象,每个 XAConnection
对象创建事务管理器用于管理连接的 XAResource
对象。
Rowset
RowSet
接口在后台与各种其他类和接口一起使用。RowSet 可分为三个类别。
- 事件通知
RowSetListener
RowSet
对象是 JavaBeansTM 组件,因为它具有属性并参与 JavaBeans 事件通知机制。RowSetListener
接口由希望在特定RowSet
对象发生事件时获得通知的组件实现。这种组件通过RowSet.addRowSetListener
方法在 rowset 中作为侦听器注册。当
RowSet
对象更改它的其中一行、所有行或者移动其指针时,它将同时通知向它注册的所有侦听器。侦听器通过执行对它调用的通知方法的实现作出反应。RowSetEvent
作为内部通知进程的一部分,RowSet
对象创建一个RowSetEvent
的实例并将其传递到侦听器。侦听器可以使用此RowSetEvent
对象来找出具有该事件的 rowset。
- 元数据
RowSetMetaData
此接口从ResultSetMetaData
接口派生而来,提供关于RowSet
对象中的列的信息。应用程序可以使用RowSetMetaData
方法来找出 rowset 包含的列数和每列可以包含的数据种类。RowSetMetaData
接口提供用于设置关于列的信息的方法,但是应用程序通常不使用这些方法。当应用程序调用RowSet
方法execute
时,RowSet
对象将包含新的行设置,并且其RowSetMetaData
对象将在内部被更新,以包含关于新行的信息。
- Reader/Writer 设施
实现RowSetInternal
接口的RowSet
对象可以调用与之关联的RowSetReader
对象来填充数据。它还可以调用与之关联的RowSetWriter
对象将对其行所做的任何更改写回数据源,它的行最初便是从该数据源获取的。保持连接到其数据源的 rowset 不需要使用 reader 和 writer,因为它可以直接对数据源进行操作。RowSetInternal
通过实现RowSetInternal
接口,RowSet
对象获取对其内部状态的访问权限,并且能够调用其 reader 和 writer。rowset 关注其当前行的值和当前行之前那个行的值(称为原始 值)。rowset 还关注:(1)已经设置的用于命令的参数(2)传递给它的连接(如果有)。rowset 在后台使用RowSetInternal
方法获取对此信息的访问权限。应用程序通常不直接调用这些方法。RowSetReader
已经实现RowSetInternal
接口的非连接RowSet
对象可以调用其 reader(与之关联的RowSetReader
对象)来填充数据。当应用程序调用RowSet.execute
方法时,该方法调用 rowset 的 reader 来执行大多数操作。实现与实现可能大不相同,但一般过程是:reader 建立到数据源的连接,从数据源读取数据并使用该数据填充 rowset,然后关闭连接。reader 还可能更新其 rowset 的RowSetMetaData
对象。rowset 的内部状态也将被更新,或者由 reader 进行或者由RowSet.execute
方法直接进行。RowSetWriter
已经实现RowSetInternal
接口的非连接RowSet
对象可以调用其 writer(与之关联的RowSetWriter
对象)将更改写回底层数据源。实现与实现可能大不相同,但一般情况下,writer 将执行以下操作:- 建立到数据源的连接
- 检查是否存在冲突,即了解曾经在 rowset 中更改的值是否在数据源中也进行了更改
- 如果不存在冲突,则将新值写入数据源
- 关闭连接
RowSet
接口可以使用多种方式实现,任何人都可以编写实现。鼓励开发人员充分发挥想象力,探索使用 rowset 的新方式。
重要注意事项:对于使用标记有 "Since 1.4" 的 API,必须使用实现 JDBC 3.0 API 的 JDBC 技术驱动程序才能运行。必须检查驱动程序文档,以确保它实现了所需使用的特定功能。
包规范
相关文档
由 Addison-Wesley Longman 出版的 Java 系列书提供关于javax.sql
包中的类和实现的详细信息:
- 从以下版本开始:
- 1.4
所有类
|
|||||||||