Package javax.sql
java.sql
软件包的补充,从版本1.4发行版开始,它包含在Java平台标准版(JavaSEâ“)中。
它仍然是Java平台企业版(Java EE™)的重要组成部分。
javax.sql
软件包提供以下内容:
- 所述
DataSource
接口作为替代DriverManager
用于建立与数据源的连接 - 连接池和语句池
- 分布式事务
- 行集
应用程序直接使用DataSource
和RowSet
API,但连接池和分布式事务API由中间层基础结构在内部使用。
使用DataSource
对象建立连接
javax.sql
程序包提供了与数据源建立连接的首选方法。
DriverManager
类(原始机制)仍然有效,使用它的代码将继续运行。
然而,较新的DataSource
机制是首选,因为它提供了优于DriverManager
机制的许多优点。
这些是使用DataSource
对象建立连接的主要优点:
- 可以对数据源的属性进行更改,这意味着当有关数据源或驱动程序的更改时,不必更改应用程序代码。
- 连接和语句池和分布式事务可通过
DataSource
对象获得,该对象实现为与中间层基础结构一起使用。 通过DriverManager
建立的连接没有连接和语句池或分布式事务功能。
驱动程序供应商提供DataSource
实现。 特定的DataSource
对象表示特定的物理数据源, DataSource
对象创建的每个连接都是与该物理数据源的连接。
数据源的逻辑名称是使用命名服务注册的,该命名服务使用Java命名和目录接口(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
池,为PreparedStatements
,这可以通过调用方法来确定DatabaseMetaData.supportsStatementPooling
,连接池管理器将注册为StatementEventListener
与新的对象PooledConnection
对象。 当PreparedStatement
关闭或出现错误时,连接池管理器(作为侦听器)将收到包含StatementEvent
对象的通知。
分布式事务
与池化连接一样,通过实现与中间层基础结构一起使用的DataSource
对象进行的连接可以参与分布式事务。
这使应用程序能够在单个事务中涉及多个服务器上的数据源。
用于分布式事务的类和接口是:
-
XADataSource
-
XAConnection
XAConnection
接口派生自PooledConnection
接口,因此适用于池连接的接口也适用于作为分布式事务一部分的连接。 中间层的事务管理器透明地处理所有事务。 应用程序代码中唯一的变化是应用程序无法执行任何会干扰事务管理器处理事务的操作。 具体来说,应用程序无法调用方法Connection.commit
或Connection.rollback
,也无法将连接设置为自动提交模式(即不能调用Connection.setAutoCommit(true)
)。
应用程序不需要做任何特殊的事情来参与分布式事务。 它只是通过DataSource.getConnection
方法创建与其想要使用的数据源的连接,就像通常那样。 事务管理器在后台管理事务。 XADataSource
接口创建XAConnection
对象,每个XAConnection
对象创建一个事务管理器用于管理连接的XAResource
对象。
行集
RowSet
接口可与幕后的各种其他类和接口配合使用。
这些可以分为三类。
- 事件通知
-
RowSetListener
RowSet
对象是JavaBeansRowSet
组件,因为它具有属性并参与JavaBeans事件通知机制。RowSetListener
接口由希望收到有关特定RowSet
对象发生的事件的通知的组件实现。 这样的组件通过RowSet.addRowSetListener
方法将自身注册为具有行集的侦听器。当
RowSet
对象更改其中一行,更改所有行或移动其光标时,它还会通知向其注册的每个侦听器。 监听器通过执行其上调用的通知方法来做出反应。 -
RowSetEvent
作为其内部的通知过程的一部分,一个RowSet
对象创建的实例RowSetEvent
并将其传递给听者。 侦听器可以使用此RowSetEvent
对象来查找具有该事件的行集。
-
- 元数据
-
RowSetMetaData
此接口派生自ResultSetMetaData
接口,提供有关RowSet
对象中的列的信息。 应用程序可以使用RowSetMetaData
方法查找行集包含的列数以及每列可包含的数据类型。RowSetMetaData
接口提供了设置有关列的信息的方法,但应用程序通常不会使用这些方法。 当应用程序调用RowSet
方法execute
,RowSet
对象将包含一组新行,其RowSetMetaData
对象将在内部更新以包含有关新列的信息。
-
- 读/写器设施
一个RowSet
实现该对象RowSetInternal
接口上拨打RowSetReader
与之相关联的对象来填充数据本身。 它还可以调用与其关联的RowSetWriter
对象,将其行的任何更改写回到最初获取行的数据源。 保持连接到其数据源的行集不需要使用读写器,因为它可以直接对数据源进行操作。-
RowSetInternal
通过实现RowSetInternal
接口,RowSet
对象可以访问其内部状态,并能够调用其读写器。 行集跟踪其当前行中的值以及紧接在当前行之前的值,称为原始值。 行集还跟踪(1)为其命令设置的参数以及(2)传递给它的连接(如果有)。 行集使用幕后的RowSetInternal
方法来访问此信息。 应用程序通常不直接调用这些方法。 -
RowSetReader
已实现RowSetInternal
接口的已断开连接的RowSet
对象可以调用其读取器(RowSetReader
关联的RowSetReader
对象)以使用数据填充它。 当应用程序调用RowSet.execute
方法时,该方法会调用行集的读取器来完成大部分工作。 实现可以有很大的不同,但通常读者会建立与数据源的连接,从数据源读取数据并使用它填充行集,并关闭连接。 读者还可以更新RowSetMetaData
对象的行集。 行集的内部状态也由读取器或直接由方法RowSet.execute
。 -
RowSetWriter
已实现RowSetInternal
接口的已断开连接的RowSet
对象可以调用其编写器(RowSetWriter
关联的RowSetWriter
对象)将更改写回基础数据源。 实现可能有很大差异,但通常,作者将执行以下操作:- 建立与数据源的连接
- 检查是否存在冲突,即是否在数据源中更改了行集中已更改的值
- 如果没有冲突,请将新值写入数据源
- 关闭连接
-
RowSet
接口可以以任何数量的方式实现,并且任何人都可以编写实现。 鼓励开发人员使用他们的想象力来提出使用行集的新方法。
包装规格
相关文档
Addison-Wesley Longman出版的Java系列丛书提供了有关javax.sql
软件包中的类和接口的详细信息:
-
接口摘要 接口 描述 CommonDataSource 接口,定义它们之间的共同的方法DataSource
,XADataSource
和ConnectionPoolDataSource
。ConnectionEventListener 注册要通知PooledConnection
对象生成的事件的对象。ConnectionPoolDataSource 一家工厂为PooledConnection
对象。DataSource 用于连接此DataSource
对象表示的物理数据源的工厂。PooledConnection 一个为连接池管理提供挂钩的对象。PooledConnectionBuilder 从ConnectionPoolDataSource
对象创建的构建器,用于建立与data source
对象表示的数据库的连接。RowSet 为JavaBeans™组件模型添加JDBC API支持的接口。RowSetInternal RowSet
对象为了将自身呈现给RowSetReader
或RowSetWriter
对象而实现的接口。RowSetListener 一个接口,必须由希望在RowSet
对象的生命周期中发生重大事件时得到通知的组件实现。RowSetMetaData 包含有关RowSet
对象中的列的RowSet
对象。RowSetReader 断开连接的RowSet
对象调用以使用数据行填充自身的工具。RowSetWriter 实现RowSetWriter
接口的对象,称为 writer 。StatementEventListener 注册以通知在Statement池中的PreparedStatements上发生的事件的对象。XAConnection 为分布式事务提供支持的对象。XAConnectionBuilder 从XADataSource
对象创建的构建器,用于建立与data source
对象表示的数据库的连接。XADataSource 内部使用的XAConnection
对象的工厂。 -
类摘要 类 描述 ConnectionEvent Event
对象,提供有关连接相关事件源的信息。RowSetEvent Event
对象发生事件时生成的RowSet
对象。StatementEvent AStatementEvent
发送给所有StatementEventListener
s,已注册PooledConnection
。