- java.lang.Object
-
- javax.sql.rowset.spi.SyncProvider
-
public abstract class SyncProviderextends Object
同步机制,为断开连接的RowSet
对象提供读取器/写入器功能。SyncProvider
实现是扩展SyncProvider
抽象类的类。SyncProvider
实现由唯一ID标识,该ID是其完全限定的类名。 此名称必须在SyncFactory
SPI中注册,从而使实现可用于所有RowSet
实现。 引用实现中的工厂机制使用此名称来实例化实现,然后可以提供RowSet
对象及其读取器(javax.sql.RowSetReader
对象)及其javax.sql.RowSetReader
器(javax.sql.RowSetWriter
对象)。Jdbc
RowSet
实现规范提供了SyncProvider
抽象类的两个参考实现:RIOptimisticProvider
和RIXMLProvider
。RIOptimisticProvider
可以使用RowSetReader
对象和RowSetWriter
对象设置任何RowSet
实现。 但是,只有RIXMLProvider
实现可以设置XmlReader
对象和XmlWriter
对象。WebRowSet
对象使用XmlReader
对象以XML格式读取数据以使用该数据填充自身。 它使用XmlWriter
对象将自身写入XML格式的流或java.io.Writer
对象。1.0实施命名公约
作为命名SyncProvider
实现的指南,应注意以下内容:-
SyncProvider
实现的名称是其完全限定的类名。 - 建议供应商在名为
providers
的软件包中提供SyncProvider
实现。
例如,如果名为Fred,Inc。的供应商提供了
SyncProvider
实现,则可以具有以下内容:Vendor name: Fred, Inc. Domain name of vendor: com.fred Package name: com.fred.providers SyncProvider implementation class name: HighAvailabilityProvider Fully qualified class name of SyncProvider implementation: com.fred.providers.HighAvailabilityProvider
以下代码行使用完全限定名称向
SyncFactory
静态实例注册此实现。SyncFactory.registerProvider( "com.fred.providers.HighAvailabilityProvider");
随参考实现提供的默认
SyncProvider
对象使用以下名称:com.sun.rowset.providers.RIOptimisticProvider
供应商可以通过发送电子邮件至jdbc@sun.com向Oracle Corporation注册
SyncProvider
实施类名称。 Oracle将维护一个数据库,列出可用的SyncProvider
实现,以便与兼容的RowSet
实现一起使用。 此数据库将类似于已列出的列出可用JDBC驱动程序的数据库。供应商应参考参考实现同步提供程序,以获取有关如何实现新
SyncProvider
实现的其他指导。2.0
断开连接的RowSet
对象如何获取其提供者Rowset
对象可以通过以下两种方式之一访问SyncProvider
对象:- 使用构造函数
CachedRowSet crs = new CachedRowSet( "com.fred.providers.HighAvailabilitySyncProvider");
- 使用
setSyncProvider
方法CachedRowSet crs = new CachedRowSet(); crs.setSyncProvider("com.fred.providers.HighAvailabilitySyncProvider");
默认情况下,
RowSet
同步提供程序的参考实现始终可供Java平台使用。 如果没有正确注册其他可插拔同步提供程序,SyncFactory
将自动生成默认SyncProvider
参考实现的实例。 因此,在前面的代码片段中,如果没有向SyncFactory
实例注册名为com.fred.providers.HighAvailabilitySyncProvider
实现,则将在引用实现中为crs分配默认提供程序,即com.sun.rowset.providers.RIOptimisticProvider
。3.0违规和同步问题
如果断开连接的RowSet
对象与数据源之间的更新违反了原始查询或基础数据源约束,则会导致所有已断开连接的RowSet
实现及其指定的SyncProvider
实现的未定义行为。 如果发生此类违规行为时未定义行为,SyncProvider
为SyncProvider
实施提供更大的灵活性,以确定其自身的最佳操作方案。SyncProvider
实现可以选择实现特定处理程序来处理查询违规的子集。 但是,如果SyncProvider
实现未处理原始查询冲突或更一般的数据源约束冲突,则所有SyncProvider
对象都必须抛出SyncProviderException
。4.0可更新的SQL VIEW
这是可能的任何断开或连接RowSet
对象从每个从SQL最初制定了一个SQL查询来填充VIEW
。 虽然在许多情况下可以对底层视图执行更新,但是这种更新需要额外的元数据,这可能会有所不同。SyncProvider
类提供了两个常量来指示实现是否支持更新SQLVIEW
。-
NONUPDATABLE_VIEW_SYNC
- 表示SyncProvider
实现不支持与SQLVIEW
同步,作为RowSet
对象的基础数据源。 -
UPDATABLE_VIEW_SYNC
- 表示SyncProvider
实现支持与SQLVIEW
同步作为基础数据源。
如果
RowSet
对象是使用SQLVIEW
数据填充的,则默认值是不可更新的。5.0
SyncProvider
常数SyncProvider
类提供了三组常量,用作SyncProvider
方法的返回值或参数。SyncProvider
对象可以被实现为一个之间执行同步RowSet
对象并伴有不同程度的护理其底层数据源。 第一组常量表示如何处理同步。 例如,GRADE_NONE
表示SyncProvider
对象不会SyncProvider
查看哪些数据有效,只是将RowSet
数据写入数据源。GRADE_MODIFIED_AT_COMMIT
表示提供程序仅检查已修改数据的有效性。 其他等级检查所有数据的有效性或在修改或加载数据时设置锁定。- 用于指示
SyncProvider
对象的同步等级的SyncProvider
- SyncProvider.GRADE_NONE
- SyncProvider.GRADE_MODIFIED_AT_COMMIT
- SyncProvider.GRADE_CHECK_ALL_AT_COMMIT
- SyncProvider.GRADE_LOCK_WHEN_MODIFIED
- SyncProvider.GRADE_LOCK_WHEN_LOADED
- 用于指示在数据源上设置了哪些锁的常量
- SyncProvider.DATASOURCE_NO_LOCK
- SyncProvider.DATASOURCE_ROW_LOCK
- SyncProvider.DATASOURCE_TABLE_LOCK
- SyncProvider.DATASOURCE_DB_LOCK
- 用于指示
SyncProvider
对象是否可以对SQLVIEW
执行更新的VIEW
这些常量在前一节(4.0)中进行了解释。- SyncProvider.UPDATABLE_VIEW_SYNC
- SyncProvider.NONUPDATABLE_VIEW_SYNC
- 从以下版本开始:
- 1.5
- 另请参见:
-
SyncFactory
,SyncFactoryException
-
-
-
字段汇总
字段 变量和类型 字段 描述 static int
DATASOURCE_DB_LOCK
表示锁定在整个数据源上,该数据源是使用此SyncProvider
对象的RowSet
对象的数据源。static int
DATASOURCE_NO_LOCK
表示原始数据源上没有锁定。static int
DATASOURCE_ROW_LOCK
指示对用于填充正在使用此SyncProvider
对象的RowSet
对象的原始SQL语句所触及的行的锁定。static int
DATASOURCE_TABLE_LOCK
指示对用于填充使用此SyncProvider
对象的RowSet
对象的原始SQL语句所触及的所有表的锁定。static int
GRADE_CHECK_ALL_AT_COMMIT
表示与原始数据源相关的高级乐观同步等级。static int
GRADE_CHECK_MODIFIED_AT_COMMIT
表示与原始数据源相关的低级别乐观同步等级。static int
GRADE_LOCK_WHEN_LOADED
表示与原始数据源相关的最悲观同步等级。static int
GRADE_LOCK_WHEN_MODIFIED
表示与原始数据源相关的悲观同步等级。static int
GRADE_NONE
表示未提供与原始数据源的同步。static int
NONUPDATABLE_VIEW_SYNC
表明SyncProvider
实现 不支持之间的同步RowSet
对象和SQLVIEW
用来填充它。static int
UPDATABLE_VIEW_SYNC
表示SyncProvider
实现支持RowSet
对象与用于填充它的SQLVIEW
之间的同步。
-
构造方法摘要
构造方法 构造器 描述 SyncProvider()
创建默认的SyncProvider
对象。
-
方法摘要
所有方法 实例方法 抽象方法 变量和类型 方法 描述 abstract int
getDataSourceLock()
返回此SyncProvider
实现中处于活动状态的当前数据源锁定严重性级别。abstract int
getProviderGrade()
返回一个常量,指示RowSet
对象可以从此SyncProvider
对象获得的同步等级。abstract String
getProviderID()
返回此SyncProvider
对象的唯一标识符。abstract RowSetReader
getRowSetReader()
返回javax.sql.RowSetReader
对象,该对象可用于使用数据填充RowSet
对象。abstract RowSetWriter
getRowSetWriter()
返回一个javax.sql.RowSetWriter
对象,该对象可用于将RowSet
对象的数据写回基础数据源。abstract String
getVendor()
返回此SyncProvider
实例的供应商名称abstract String
getVersion()
返回此SyncProvider
实例的发行版本。abstract void
setDataSourceLock(int datasource_lock)
在 datasource_lock指示的级别设置对基础数据源的锁定。abstract int
supportsUpdatableView()
返回此SyncProvider
实现是否可以在RowSet
对象与RowSet
对象从中获取其数据的数据源中的SQLVIEW
之间执行同步。
-
-
-
字段详细信息
-
GRADE_NONE
public static final int GRADE_NONE
表示未提供与原始数据源的同步。 返回此等级的SyncProvider
实现将仅尝试将RowSet
对象中的更新写入基础数据源,而不检查任何数据的有效性。- 另请参见:
- 常数字段值
-
GRADE_CHECK_MODIFIED_AT_COMMIT
public static final int GRADE_CHECK_MODIFIED_AT_COMMIT
表示与原始数据源相关的低级别乐观同步等级。 返回此等级的SyncProvider
实现将仅检查已更改的行。- 另请参见:
- 常数字段值
-
GRADE_CHECK_ALL_AT_COMMIT
public static final int GRADE_CHECK_ALL_AT_COMMIT
表示与原始数据源相关的高级乐观同步等级。 返回此等级的SyncProvider
实现将检查所有行,包括未更改的行。- 另请参见:
- 常数字段值
-
GRADE_LOCK_WHEN_MODIFIED
public static final int GRADE_LOCK_WHEN_MODIFIED
表示与原始数据源相关的悲观同步等级。 返回此等级的SyncProvider
实现将锁定原始数据源中的行。- 另请参见:
- 常数字段值
-
GRADE_LOCK_WHEN_LOADED
public static final int GRADE_LOCK_WHEN_LOADED
表示与原始数据源相关的最悲观同步等级。 返回此等级的SyncProvider
实现将锁定受用于填充RowSet
对象的原始语句影响的整个视图和/或表。- 另请参见:
- 常数字段值
-
DATASOURCE_NO_LOCK
public static final int DATASOURCE_NO_LOCK
表示原始数据源上没有锁定。 这是所有SyncProvider
实现的默认锁定设置,除非RowSet
对象另有指示。- 另请参见:
- 常数字段值
-
DATASOURCE_ROW_LOCK
public static final int DATASOURCE_ROW_LOCK
指示对用于填充使用此SyncProvider
对象的RowSet
对象的原始SQL语句所触及的行的锁定。- 另请参见:
- 常数字段值
-
DATASOURCE_TABLE_LOCK
public static final int DATASOURCE_TABLE_LOCK
指示对用于填充使用此SyncProvider
对象的RowSet
对象的原始SQL语句所触及的所有表的锁定。- 另请参见:
- 常数字段值
-
DATASOURCE_DB_LOCK
public static final int DATASOURCE_DB_LOCK
表示锁定在整个数据源上,该数据源是使用此SyncProvider
对象的RowSet
对象的数据源。- 另请参见:
- 常数字段值
-
UPDATABLE_VIEW_SYNC
public static final int UPDATABLE_VIEW_SYNC
表示SyncProvider
实现支持RowSet
对象与用于填充它的SQLVIEW
之间的同步。- 另请参见:
- 常数字段值
-
NONUPDATABLE_VIEW_SYNC
public static final int NONUPDATABLE_VIEW_SYNC
表明SyncProvider
实现 不支持之间的同步RowSet
对象和SQLVIEW
用来填充它。- 另请参见:
- 常数字段值
-
-
方法详细信息
-
getProviderID
public abstract String getProviderID()
返回此SyncProvider
对象的唯一标识符。- 结果
- 具有此
String
对象的完全限定类名的SyncProvider
对象
-
getRowSetReader
public abstract RowSetReader getRowSetReader()
返回javax.sql.RowSetReader
对象,该对象可用于使用数据填充RowSet
对象。- 结果
- 一个
javax.sql.RowSetReader
对象
-
getRowSetWriter
public abstract RowSetWriter getRowSetWriter()
返回javax.sql.RowSetWriter
对象,该对象可用于将RowSet
对象的数据写回基础数据源。- 结果
- 一个
javax.sql.RowSetWriter
对象
-
getProviderGrade
public abstract int getProviderGrade()
返回一个常量,指示RowSet
对象可以从此SyncProvider
对象获得的同步等级。- 结果
- 一个int,它是以下常量之一:SyncProvider.GRADE_NONE,SyncProvider.GRADE_CHECK_MODIFIED_AT_COMMIT,SyncProvider.GRADE_CHECK_ALL_AT_COMMIT,SyncProvider.GRADE_LOCK_WHEN_MODIFIED,SyncProvider.GRADE_LOCK_WHEN_LOADED
-
setDataSourceLock
public abstract void setDataSourceLock(int datasource_lock) throws SyncProviderException
在datasource_lock指示的级别设置对基础数据源的锁定。 这应该使SyncProvider
通过提高或降低它为成功同步提供的乐观程度来调整其行为。- 参数
-
datasource_lock
- 以下常量之一,指示所需数据源锁定的严重性级别:SyncProvider.DATASOURCE_NO_LOCK, SyncProvider.DATASOURCE_ROW_LOCK, SyncProvider.DATASOURCE_TABLE_LOCK, SyncProvider.DATASOURCE_DB_LOCK,
- 异常
-
SyncProviderException
- 如果设置了不受支持的数据源锁定级别。 - 另请参见:
-
getDataSourceLock()
-
getDataSourceLock
public abstract int getDataSourceLock() throws SyncProviderException
返回此SyncProvider
实现中处于活动状态的当前数据源锁定严重性级别。- 结果
- 一个常量,指示此
SyncProvider
对象中当前的数据源锁定活动级别; 以下之一:SyncProvider.DATASOURCE_NO_LOCK, SyncProvider.DATASOURCE_ROW_LOCK, SyncProvider.DATASOURCE_TABLE_LOCK, SyncProvider.DATASOURCE_DB_LOCK
- 异常
-
SyncProviderException
- 如果确定数据源锁定级别时发生错误。 - 另请参见:
-
setDataSourceLock(int)
-
supportsUpdatableView
public abstract int supportsUpdatableView()
返回此SyncProvider
实现是否可以在RowSet
对象与RowSet
对象从中获取其数据的数据源中的SQLVIEW
之间执行同步。- 结果
-
int
说明这个SyncProvider
对象是否支持更新SQLVIEW
; 以下之一:SyncProvider.UPDATABLE_VIEW_SYNC,SyncProvider.NONUPDATABLE_VIEW_SYNC
-
getVersion
public abstract String getVersion()
返回此SyncProvider
实例的发行版本。- 结果
-
String
详细说明了SyncProvider
实现的发行版本
-
getVendor
public abstract String getVendor()
返回此SyncProvider
实例的供应商名称- 结果
-
String
详细说明了此SyncProvider
实现的供应商名称
-
-