javax.sql.rowset.spi

接口
异常
java.lang.Object
  继承者 javax.sql.rowset.spi.SyncProvider

public abstract class SyncProvider
     
extends Object

为非连接 RowSet 对象提供 reader/writer 功能的同步机制。SyncProvider 实现是一个扩展了 SyncProvider 抽象类的类。

SyncProvider 实现由一个唯一 ID 标识,该 ID 即其完全限定类名称。此名称必须向 SyncFactory SPI 注册,这样才能使该实现可用于所有的 RowSet 实现。参考实现中的工厂机制使用此名称来实例化该实现,然后该实现可以通过其 reader(javax.sql.RowSetReader 对象)和 writer(javax.sql.RowSetWriter 对象)提供一个 RowSet 对象。

Jdbc RowSet 实现规范提供 SyncProvider 抽象类的两个参考实现:RIOptimisticProviderRIXMLProviderRIOptimisticProvider 可以使用 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 向 Sun Microsystems 公司注册 SyncProvider 实现类名称。Sun 将维护列出可用 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 实现提供更大的灵活性,使它能自己决定如何反应。

SyncProvider 实现可以选择实现特定的处理程序来处理查询冲突的子集。但是,如果 SyncProvider 实现没有处理原始查询冲突或更一般的数据源约束冲突,则所有的 SyncProvider 对象必须抛出 SyncProviderException

4.0 可更新的 SQL VIEW

能够从 SQL 查询(最初从 SQL VIEW 形成)填充任何非连接或连接的 RowSet 对象。虽然在许多情况下能够对底层视图执行更新,但是此类更新需要附加的元数据,并且该数据可能不同。 SyncProvider 类提供两个常量来指示实现是否支持更新 SQL VIEW
  • NONUPDATABLE_VIEW_SYNC - 指示将 SQL VIEW 作为 RowSet 对象的数据底层源的情况下,SyncProvider 实现不支持与它的同步。
  • UPDATABLE_VIEW_SYNC - 指示将 SQL VIEW 作为数据底层源的情况下,SyncProvider 实现支持与它的同步。

如果使用取自 SQL VIEW 的数据填充 RowSet 对象,则默认情况是它不可更新。

5.0 SyncProvider 常量

SyncProvider 类提供三个常量集,用作返回值或 SyncProvider 方法的参数。可以实现 SyncProvider 对象来使用不同的关心程度执行 RowSet 对象与其底层数据源之间的同步。第一组常量指示如何处理同步。例如, GRADE_NONE 指示 SyncProvider 对象将不会注意查看哪些数据有用,只是将 RowSet 数据写入数据源。 GRADE_MODIFIED_AT_COMMIT 指示提供者只检查修改数据的有效性。其他等级检查所有数据的有效性,或者在修改或加载数据时设置锁定。
  1. 指示 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
  2. 指示在数据源上设置何种锁定的常量
    • SyncProvider.DATASOURCE_NO_LOCK
    • SyncProvider.DATASOURCE_ROW_LOCK
    • SyncProvider.DATASOURCE_TABLE_LOCK
    • SyncProvider.DATASOURCE_DB_LOCK
  3. 指示 SyncProvider 对象是否可以对 SQL VIEW 执行更新的常量
    在前述的章节 (4.0) 中已对这些常量进行了解释。
    • SyncProvider.UPDATABLE_VIEW_SYNC
    • SyncProvider.NONUPDATABLE_VIEW_SYNC

另请参见:
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
 

字段详细信息

GRADE_NONE

public static int GRADE_NONE
指示没有提供与原始数据源的同步。返回此等级的 SyncProvider 实现仅尝试将 RowSet 对象中的更新写入底层数据源,而不检查任何数据的有效性。


GRADE_CHECK_MODIFIED_AT_COMMIT

public static int GRADE_CHECK_MODIFIED_AT_COMMIT
指示关于原始数据源的低级别乐观同步等级。 返回此等级的 SyncProvider 实现只检查已经更改的行。


GRADE_CHECK_ALL_AT_COMMIT

public static int GRADE_CHECK_ALL_AT_COMMIT
指示关于原始数据源的高级别乐观同步等级。 返回此等级的 SyncProvider 实现将检查所有的行,包括没有更改的行。


GRADE_LOCK_WHEN_MODIFIED

public static int GRADE_LOCK_WHEN_MODIFIED
指示关于原始数据源的悲观同步等级。 返回此等级的 SyncProvider 实现将锁定原始数据源中的行。


GRADE_LOCK_WHEN_LOADED

public static int GRADE_LOCK_WHEN_LOADED
指示关于原始数据源的最悲观同步等级。返回此等级的 SyncProvider 实现将锁定用于填充 RowSet 对象的原始语句所影响的整个视图和/或表。


DATASOURCE_NO_LOCK

public static int DATASOURCE_NO_LOCK
指示在原始数据源上不保持任何锁定。如果 RowSet 对象没有其他指示,则这是所有 SyncProvider 实现的默认锁定设置。


DATASOURCE_ROW_LOCK

public static int DATASOURCE_ROW_LOCK
指示锁定原始 SQL 语句涉及的行,该语句用于填充正在使用此 SyncProvider 对象的 RowSet 对象。


DATASOURCE_TABLE_LOCK

public static int DATASOURCE_TABLE_LOCK
指示锁定原始 SQL 语句涉及的所有表,该语句用于填充正在使用此 SyncProvider 对象的 RowSet 对象。


DATASOURCE_DB_LOCK

public static int DATASOURCE_DB_LOCK
指示锁定整个数据源,该数据源是正在使用此 SyncProvider 对象的 RowSet 对象的数据源。


UPDATABLE_VIEW_SYNC

public static int UPDATABLE_VIEW_SYNC
指示 SyncProvider 实现支持 RowSet 对象和用于填充它的 SQL VIEW 之间的同步。


NONUPDATABLE_VIEW_SYNC

public static int NONUPDATABLE_VIEW_SYNC
指示 SyncProvider 实现 支持 RowSet 对象和用于填充它的 SQL VIEW 之间的同步。

构造方法详细信息

SyncProvider

public SyncProvider()
创建默认的 SyncProvider 对象。

方法详细信息

getProviderID

public abstract String getProviderID()
返回此 SyncProvider 对象的唯一标识符。

返回:
具有此 SyncProvider 对象的完全限定类名的 String 对象

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     
 
抛出:
SyncProviderExceptiom - 如果在确定数据源锁定级别时发生错误。
SyncProviderException
另请参见:
setDataSourceLock(int)

supportsUpdatableView

public abstract int supportsUpdatableView()
返回此 SyncProvider 实现是否可以执行 RowSet 对象和数据源( RowSet 从中获取其数据)中的 SQL VIEW 之间的同步。

返回:
一个 int,表示此 SyncProvider 对象是否支持更新 SQL VIEW;它是以下常量之一:SyncProvider.UPDATABLE_VIEW_SYNC、SyncProvider.NONUPDATABLE_VIEW_SYNC

getVersion

public abstract String getVersion()
返回此 SyncProvider 实例的发行版本。

返回:
一个 String,它详述了 SyncProvider 实现的发行版本

getVendor

public abstract String getVendor()
返回此 SyncProvider 实例的供应商名称

返回:
一个 String,它详述了此 SyncProvider 实现的供应商名称