java.lang.Object javax.sql.rowset.spi.SyncProvider
public abstract class SyncProvider
为非连接 RowSet
对象提供 reader/writer 功能的同步机制。SyncProvider
实现是一个扩展了 SyncProvider
抽象类的类。
SyncProvider
实现由一个唯一 ID 标识,该 ID 即其完全限定类名称。此名称必须向 SyncFactory
SPI 注册,这样才能使该实现可用于所有的 RowSet
实现。参考实现中的工厂机制使用此名称来实例化该实现,然后该实现可以通过其 reader(javax.sql.RowSetReader
对象)和 writer(javax.sql.RowSetWriter
对象)提供一个 RowSet
对象。
Jdbc RowSet
实现规范提供 SyncProvider
抽象类的两个参考实现:RIOptimisticProvider
和 RIXMLProvider
。RIOptimisticProvider
可以使用 RowSetReader
对象和 RowSetWriter
对象设置任何 RowSet
实现。但是,只有 RIXMLProvider
实现可以设置 XmlReader
对象和 XmlWriter
对象。WebRowSet
对象使用 XmlReader
对象以 XML 格式读取数据,然后使用该数据填充本身。它使用 XmlWriter
对象以 XML 格式将本身写入到流或 java.io.Writer
对象。
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 向 Sun Microsystems 公司注册 SyncProvider
实现类名称。Sun 将维护列出可用 SyncProvider
实现的数据库,以便与兼容 RowSet
实现一起使用。此数据库将类似于已维护列出可用 JDBC 驱动程序的数据库。
有关如何实现一个新的 SyncProvider
实现的附加指南,供应商应参考参考实现同步提供者。
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
。
RowSet
对象和数据源之间的更新与初始查询或底层数据源约束发生冲突,则这将导致所有非连接
RowSet
实现及其指派的
SyncProvider
实现的行为不明确。不定义此类冲突发生时的行为给
SyncProvider
实现提供更大的灵活性,使它能自己决定如何反应。
SyncProvider
实现可以选择实现特定的处理程序来处理查询冲突的子集。但是,如果 SyncProvider
实现没有处理原始查询冲突或更一般的数据源约束冲突,则所有的 SyncProvider
对象必须抛出 SyncProviderException
。
VIEW
形成)填充任何非连接或连接的
RowSet
对象。虽然在许多情况下能够对底层视图执行更新,但是此类更新需要附加的元数据,并且该数据可能不同。
SyncProvider
类提供两个常量来指示实现是否支持更新 SQL
VIEW
。
NONUPDATABLE_VIEW_SYNC
- 指示将 SQL VIEW
作为 RowSet
对象的数据底层源的情况下,SyncProvider
实现不支持与它的同步。 UPDATABLE_VIEW_SYNC
- 指示将 SQL VIEW
作为数据底层源的情况下,SyncProvider
实现支持与它的同步。 如果使用取自 SQL VIEW
的数据填充 RowSet
对象,则默认情况是它不可更新。
SyncProvider
常量SyncProvider
类提供三个常量集,用作返回值或
SyncProvider
方法的参数。可以实现
SyncProvider
对象来使用不同的关心程度执行
RowSet
对象与其底层数据源之间的同步。第一组常量指示如何处理同步。例如,
GRADE_NONE
指示
SyncProvider
对象将不会注意查看哪些数据有用,只是将
RowSet
数据写入数据源。
GRADE_MODIFIED_AT_COMMIT
指示提供者只检查修改数据的有效性。其他等级检查所有数据的有效性,或者在修改或加载数据时设置锁定。
SyncProvider
对象的同步等级的常量
SyncProvider
对象是否可以对 SQL VIEW
执行更新的常量
SyncFactory
,
SyncFactoryException
字段摘要 | |
---|---|
static int |
DATASOURCE_DB_LOCK 指示锁定整个数据源,该数据源是正在使用此 SyncProvider 对象的 RowSet 对象的数据源。 |
static int |
DATASOURCE_NO_LOCK 指示在原始数据源上不保持任何锁定。 |
static int |
DATASOURCE_ROW_LOCK 指示锁定原始 SQL 语句涉及的行,该语句用于填充正在使用此 SyncProvider 对象的 RowSet 对象。 |
static int |
DATASOURCE_TABLE_LOCK 指示锁定原始 SQL 语句涉及的所有表,该语句用于填充正在使用此 SyncProvider 对象的 RowSet 对象。 |
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 对象和用于填充它的 SQL VIEW 之间的同步。 |
static int |
UPDATABLE_VIEW_SYNC 指示 SyncProvider 实现支持 RowSet 对象和用于填充它的 SQL VIEW 之间的同步。 |
构造方法摘要 | |
---|---|
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 从中获取其数据)中的 SQL VIEW 之间的同步。 |
从类 java.lang.Object 继承的方法 |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
字段详细信息 |
---|
public static int GRADE_NONE
SyncProvider
实现仅尝试将
RowSet
对象中的更新写入底层数据源,而不检查任何数据的有效性。
public static int GRADE_CHECK_MODIFIED_AT_COMMIT
SyncProvider
实现只检查已经更改的行。
public static int GRADE_CHECK_ALL_AT_COMMIT
SyncProvider
实现将检查所有的行,包括没有更改的行。
public static int GRADE_LOCK_WHEN_MODIFIED
SyncProvider
实现将锁定原始数据源中的行。
public static int GRADE_LOCK_WHEN_LOADED
SyncProvider
实现将锁定用于填充
RowSet
对象的原始语句所影响的整个视图和/或表。
public static int DATASOURCE_NO_LOCK
RowSet
对象没有其他指示,则这是所有
SyncProvider
实现的默认锁定设置。
public static int DATASOURCE_ROW_LOCK
SyncProvider
对象的
RowSet
对象。
public static int DATASOURCE_TABLE_LOCK
SyncProvider
对象的
RowSet
对象。
public static int DATASOURCE_DB_LOCK
SyncProvider
对象的
RowSet
对象的数据源。
public static int UPDATABLE_VIEW_SYNC
SyncProvider
实现支持
RowSet
对象和用于填充它的 SQL
VIEW
之间的同步。
public static int NONUPDATABLE_VIEW_SYNC
SyncProvider
实现
不支持
RowSet
对象和用于填充它的 SQL
VIEW
之间的同步。
构造方法详细信息 |
---|
public SyncProvider()
SyncProvider
对象。
方法详细信息 |
---|
public abstract String getProviderID()
SyncProvider
对象的唯一标识符。
SyncProvider
对象的完全限定类名的
String
对象
public abstract RowSetReader getRowSetReader()
javax.sql.RowSetReader
对象,它可以用于填充带有数据的
RowSet
对象。
javax.sql.RowSetReader
对象
public abstract RowSetWriter getRowSetWriter()
javax.sql.RowSetWriter
对象,它可以用于将
RowSet
对象的数据写回底层数据源。
javax.sql.RowSetWriter
对象
public abstract int getProviderGrade()
RowSet
对象希望从此
SyncProvider
对象获得的同步等级。
public abstract void setDataSourceLock(int datasource_lock) throws SyncProviderException
SyncProvider
为能成功同步而调整其行为,即增加或减少其提供的乐观级别。
datasource_lock
- 以下常量之一,它指示所需数据源锁定的严重性级别:
SyncProvider.DATASOURCE_NO_LOCK, SyncProvider.DATASOURCE_ROW_LOCK, SyncProvider.DATASOURCE_TABLE_LOCK, SyncProvider.DATASOURCE_DB_LOCK,
SyncProviderException
- 如果设置不支持的数据源锁定级别。
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
SyncProviderExceptiom
- 如果在确定数据源锁定级别时发生错误。
SyncProviderException
setDataSourceLock(int)
public abstract int supportsUpdatableView()
SyncProvider
实现是否可以执行
RowSet
对象和数据源(
RowSet
从中获取其数据)中的 SQL
VIEW
之间的同步。
int
,表示此
SyncProvider
对象是否支持更新 SQL
VIEW
;它是以下常量之一:SyncProvider.UPDATABLE_VIEW_SYNC、SyncProvider.NONUPDATABLE_VIEW_SYNC
public abstract String getVersion()
SyncProvider
实例的发行版本。
String
,它详述了
SyncProvider
实现的发行版本
public abstract String getVendor()
SyncProvider
实例的供应商名称
String
,它详述了此
SyncProvider
实现的供应商名称