- java.lang.Object
-
- javax.sql.rowset.spi.SyncProvider
-
public abstract class SyncProvider extends Object
同步机制,为断开连接的RowSet对象提供读写器功能。 一个SyncProvider实现是一个扩展SyncProvider抽象类的类。A
SyncProvider实现由唯一的ID标识,唯一的ID是其完全限定的类名。 该名称必须注册到SyncFactorySPI,从而使实现可用于所有RowSet实现。 在参考实施工厂机制使用该名称来实例化的实施,则其可提供RowSet对象与其读取器(一个javax.sql.RowSetReader对象)及其写入器(一个javax.sql.RowSetWriter对象)。Jdbc
RowSet实现规范提供了SyncProvider抽象类的两个参考实现:RIOptimisticProvider和RIXMLProvider。RIOptimisticProvider可以设置任何RowSet实现与一个RowSetReader对象和一个RowSetWriter对象。 但是,只有RIXMLProvider实现可以设置一个XmlReader对象和一个XmlWriter对象。WebRowSet对象使用XmlReader对象以XML格式读取数据以填充该数据。 它使用XmlWriter对象将其自身写入流或java.io.Writer对象以XML格式。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参考实现的实例。 因此,在前面的代码片段,如果没有名为实施com.fred.providers.HighAvailabilitySyncProvider已经与注册SyncFactory例如,CRS将被分配在参考实施方式中,这是默认提供商com.sun.rowset.providers.RIOptimisticProvider。3.0违规和同步问题
如果断开连接的RowSet对象和数据源之间的更新违反原始查询或底层数据源约束,则会导致所有断开连接的RowSet实现及其指定的SyncProvider实现的未定义行为。 当这种违规行为发生时,不定义行为为SyncProvider实施提供了更大的灵活性,以确定其最佳行动方案。A
SyncProvider实现可以选择实现特定的处理程序来处理查询违规的一个子集。 但是,如果原始查询违规或更一般的数据源约束违规未由SyncProvider实现处理,则所有SyncProvider对象都必须抛出SyncProviderException。4.0可更新的SQL VIEW
可以从最初来自SQLVIEW的SQL查询中填充任何已断开连接的或连接的对象RowSet对象。 虽然在许多情况下可以对基础视图执行更新,但是这种更新需要额外的元数据,这可能会有所不同。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对象不会关心哪些数据有效,并将简单地将RowSet数据写入数据源。GRADE_MODIFIED_AT_COMMIT表示提供者将仅检查修改后的数据的有效性。 其他等级检查数据是否有效,或者在数据修改或加载时设置锁定。- 常数表示
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
-
-
-
Field Summary
Fields Modifier and Type Field 描述 static intDATASOURCE_DB_LOCK表示在作为使用此SyncProvider对象的RowSet对象的数据源的整个数据源上放置一个锁。static intDATASOURCE_NO_LOCK表示始发数据源上没有锁。static intDATASOURCE_ROW_LOCK表示锁定被放置在用于填充使用该SyncProvider对象的RowSet对象的原始SQL语句所触及的行上。static intDATASOURCE_TABLE_LOCK表示在用于填充正在使用此SyncProvider对象的RowSet对象的原始SQL语句所触及的所有表上都放置了一个锁。static intGRADE_CHECK_ALL_AT_COMMIT表示相对于始发数据源的高级乐观同步等级。static intGRADE_CHECK_MODIFIED_AT_COMMIT表示相对于始发数据源的低级乐观同步等级。static intGRADE_LOCK_WHEN_LOADED表示相对于始发数据源最悲观的同步等级。static intGRADE_LOCK_WHEN_MODIFIED表示相对于始发数据源的悲观同步等级。static intGRADE_NONE表示不提供与始发数据源的同步。static intNONUPDATABLE_VIEW_SYNC表明SyncProvider实现 不支持之间的同步RowSet对象和SQLVIEW用来填充它。static intUPDATABLE_VIEW_SYNC表示SyncProvider实现支持RowSet对象与用于填充对象的SQLVIEW之间的同步。
-
构造方法摘要
构造方法 Constructor 描述 SyncProvider()创建默认的SyncProvider对象。
-
方法摘要
所有方法 接口方法 抽象方法 Modifier and Type 方法 描述 abstract intgetDataSourceLock()返回此SyncProvider实现中当前的数据源锁严重级别。abstract intgetProviderGrade()返回一个常量,指示RowSet对象可以从此SyncProvider对象预期的同步等级。abstract StringgetProviderID()返回此SyncProvider对象的唯一标识符。abstract RowSetReadergetRowSetReader()返回一个javax.sql.RowSetReader对象,可以用来填充RowSet对象的数据。abstract RowSetWritergetRowSetWriter()返回一个javax.sql.RowSetWriter对象,可用于将一个RowSet对象的数据写回底层数据源。abstract StringgetVendor()返回此SyncProvider实例的供应商名称abstract StringgetVersion()返回此SyncProvider实例的发行版本。abstract voidsetDataSourceLock(int datasource_lock)在 datasource_lock指示的级别设置底层数据源上的锁定。abstract intsupportsUpdatableView()返回此SyncProvider实现是否可以执行RowSet对象与RowSet对象获取其数据的数据源中的SQLVIEW之间的同步。
-
-
-
字段详细信息
-
GRADE_NONE
public static final int GRADE_NONE
表示不提供与始发数据源的同步。 返回此成绩的SyncProvider实现将简单地尝试将RowSet对象中的更新写入底层数据源,而不会检查任何数据的有效性。- 另请参见:
- Constant Field Values
-
GRADE_CHECK_MODIFIED_AT_COMMIT
public static final int GRADE_CHECK_MODIFIED_AT_COMMIT
表示相对于始发数据源的低级乐观同步等级。 返回此等级的SyncProvider实现将仅检查已更改的行。- 另请参见:
- Constant Field Values
-
GRADE_CHECK_ALL_AT_COMMIT
public static final int GRADE_CHECK_ALL_AT_COMMIT
表示相对于始发数据源的高级乐观同步等级。 返回此等级的SyncProvider实现将检查所有行,包括尚未更改的行。- 另请参见:
- Constant Field Values
-
GRADE_LOCK_WHEN_MODIFIED
public static final int GRADE_LOCK_WHEN_MODIFIED
表示相对于始发数据源的悲观同步等级。 返回此等级的SyncProvider实现将锁定始发数据源中的行。- 另请参见:
- Constant Field Values
-
GRADE_LOCK_WHEN_LOADED
public static final int GRADE_LOCK_WHEN_LOADED
表示相对于始发数据源最悲观的同步等级。 返回此等级的SyncProvider实现将锁定用于填充RowSet对象的原始语句影响的整个视图和/或表。- 另请参见:
- Constant Field Values
-
DATASOURCE_NO_LOCK
public static final int DATASOURCE_NO_LOCK
表示始发数据源上没有锁。 这是所有SyncProvider实现的默认锁定设置,除非另有指示RowSet对象。- 另请参见:
- Constant Field Values
-
DATASOURCE_ROW_LOCK
public static final int DATASOURCE_ROW_LOCK
表示在用于填充使用该SyncProvider对象的RowSet对象的原始SQL语句所触摸的行上放置了一个锁。- 另请参见:
- Constant Field Values
-
DATASOURCE_TABLE_LOCK
public static final int DATASOURCE_TABLE_LOCK
表示在用于填充正在使用此SyncProvider对象的RowSet对象的原始SQL语句所触及的所有表上都放置了一个锁。- 另请参见:
- Constant Field Values
-
DATASOURCE_DB_LOCK
public static final int DATASOURCE_DB_LOCK
表示锁定位于整个数据源上,该数据源是使用该SyncProvider对象的RowSet对象的数据源。- 另请参见:
- Constant Field Values
-
UPDATABLE_VIEW_SYNC
public static final int UPDATABLE_VIEW_SYNC
表示SyncProvider实现支持RowSet对象与用于填充对象的SQLVIEW之间的同步。- 另请参见:
- Constant Field Values
-
NONUPDATABLE_VIEW_SYNC
public static final int NONUPDATABLE_VIEW_SYNC
表明SyncProvider实现 不支持之间的同步RowSet对象和SQLVIEW用来填充它。- 另请参见:
- Constant Field Values
-
-
方法详细信息
-
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实现的供应商名称
-
-