请参见:
描述
接口摘要 | |
---|---|
CommonDataSource | 此接口定义在 DataSource 、XADataSource 和 ConnectionPoolDataSource 之间公用的方法。 |
ConnectionEventListener | 注册该对象便可获得由 PooledConnection 对象生成的事件的通知。 |
ConnectionPoolDataSource | PooledConnection 对象的工厂。 |
DataSource | 该工厂用于提供到此 DataSource 对象所表示的物理数据源的连接。 |
PooledConnection | 为连接池管理提供钩子 (hook) 的对象。 |
RowSet | 该接口添加了对 JavaBeansTM 组件模型的 JDBC API 支持。 |
RowSetInternal | 为了将自身呈现给 RowSetReader 或 RowSetWriter 对象的 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 。 |
为通过 JavaTM 编程语言进行服务器端数据源访问和处理提供 API。此包补充了 java.sql
包,它从 1.4 版本开始包含在 Java 平台、标准版 (Java SETM) 中。它保留了 Java 平台、企业版 (Java EETM) 中的精华部分。
java.sql
包中提供以下内容:
DataSource
接口,用于建立到数据源的连接,是 DriverManager
的替代项。 应用程序直接使用 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
对象建立的连接将参与连接池。这能显著地提高性能,因为创建新连接开销很大。连接池允许使用和重用连接,因此可以极大地减少需要创建的新连接数。
连接池是完全透明的。此操作是在中间层 Java EE 配置中自动完成的,因此就应用程序而言,无需对代码进行任何更改。应用程序可以简单地使用 DataSource.getConnection
方法获取入池连接,并按使用任何 Connection
对象相同的方式使用该连接。
用于连接池的类和接口是:
ConnectionPoolDataSource
PooledConnection
ConnectionEvent
ConnectionEventListener
StatementEvent
StatementEventListener
ConnectionPoolDataSource
对象创建
PooledConnection
对象时,连接池管理器将作为
ConnectionEventListener
对象在新
PooledConnection
对象中注册。当关闭连接或发生错误时,连接池管理器(作为侦听器)获取包括
ConnectionEvent
对象在内的通知。
如果连接池管理器支持 Statement
池,则对于可以通过调用 DatabaseMetaData.supportsStatementPooling
方法确定的 PreparedStatements
,连接池管理器将向新 PooledConnection
对象注册为 StatementEventListener
对象。当 PreparedStatement
关闭或者发生错误时,连接池管理器(作为一个侦听器)获取一个通知,该通知包括 StatementEvent
对象。
DataSource
对象建立的连接可参与分布式事务。这为应用程序提供了在单个事务中占用多个服务器上的数据源的能力。
用于分布式事务的类和接口是:
XADataSource
XAConnection
XAConnection
接口是从 PooledConnection
接口派生的,因此适用于入池连接的内容也适用于作为分布式事务一部分的连接。中间层中的事务管理器透明地处理所有动作。应用程序代码中的唯一变化是,应用程序不能执行任何与事务管理器对事务的处理有冲突的操作。更明确地说,应用程序不能调用方法 Connection.commit
或 Connection.rollback
,并且它不能将连接设置为自动提交模式(即它不能调用 Connection.setAutoCommit(true)
)。
应用程序不必为参与分布式事务而执行任何特殊操作。它只需要通过 DataSource.getConnection
方法创建到所需的数据源的连接,就跟它通常的做法一样。事务管理器在后台管理事务。XADataSource
接口创建 XAConnection
对象,每个 XAConnection
对象创建事务管理器用于管理连接的 XAResource
对象。
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
对象将在内部被更新,以包含关于新行的信息。
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 的新方式。
重要注意事项:对于使用标记有 "Since 1.6" 的 API,必须使用实现 JDBC 4.0 API 的 JDBC 技术驱动程序才能运行。必须检查驱动程序文档,以确保它实现了所需使用的特定功能。
javax.sql
包中的类和实现的详细信息: