public interface SyncResolver extends RowSet
注意,一个冲突的情况下,连续RowSet
对象的原始值不匹配数据源中的值,这表明数据源行已自上次同步修改。另外,RowSet
对象的原始值是它刚到上次同步之前的值,不一定是它的初始值。
SyncResolver
对象描述SyncResolver
对象是一个特殊的
RowSet
对象实现
SyncResolver
接口。它
可以作为一个连接对象(
RowSet
的
JdbcRowSet
接口的一个实现)或连接对象(
RowSet
的
CachedRowSet
接口或其子接口的实现)。在子接口信息,看到
javax.sql.rowset
包装说明。对于
SyncResolver
参考实现,实现了
CachedRowSet
接口,但其他的实现可能选择实施
JdbcRowSet
接口来满足特定的需求。
当应用程序试图同步RowSet
对象与数据源(通过调用CachedRowSet
方法acceptChanges
),和一个或更多的冲突已经找到,一个行集的SyncProvider
对象创建SyncResolver
实例。这种新的SyncResolver
对象具有相同行数和列数为RowSet
对象,试图同步。的SyncResolver
对象包含从引起冲突的数据源的值(S)和其他所有的价值观null
。此外,它包含了关于每个冲突的信息。
SyncResolver
对象acceptChanges
遭遇冲突的
SyncProvider
对象创建一个
SyncProviderException
对象并设置了新
SyncResolver
对象。方法
acceptChanges
会抛出该异常,该应用程序可以捕获和使用检索包含
SyncResolver
对象。下面的代码片段使用
SyncProviderException
方法
getSyncResolver
得到
SyncResolver
对象旋转变压器。
抓(syncproviderexception SPE){syncresolver解析器= getsyncresolver() SPE;…}}
与旋转变压器在手,应用程序可以用它来获得它包含有关冲突或矛盾的信息。一个SyncResolver
对象如旋转变压器跟踪每一行中有冲突的冲突。它也锁在表或表受行集的命令,没有更多的冲突,目前正在发生的冲突解决。
以下类型的信息可以从一个SyncResolver
对象获得:
SyncProvider
接口定义了四个常量描述状态可能发生。三常数描述操作的类型(更新,删除或插入),
RowSet
对象正在执行冲突时被发现,而第四表示没有冲突。这些常数是可能的返回值时,
SyncResolver
对象调用方法
getStatus
。
int operation = resolver.getStatus();
RowSet
对象已经发生了变化,试图写入数据源也已自上次同步在数据源发生变化。应用程序可以调用
SyncResolver
方法
getConflictValue
,冲突的原因是因为在
SyncResolver
对象的值是从数据源中的价值观冲突的数据源中检索的值。
conflictvalue java.lang.Object =解析器。getconflictvalue(2);注意旋转变压器列可以通过列数指定,为的是在前面的代码行,或列名称。
随着信息的方法getStatus
和getConflictValue
检索,应用程序可以确定的值应该保持在数据源。然后应用程序调用SyncResolver
方法setResolvedValue
,设定值被保存在RowSet
对象和数据源中。
解析器。setresolvedvalue(“部”,8390426);在前面的代码行,这是与给定值的
RowSet
对象的列名称指定的列。列号也可以用来指定列。
应用程序调用的方法setResolvedValue
后解决了所有的矛盾冲突在当前行和重复此过程为每个冲突排在SyncResolver
对象。
SyncResolver
对象SyncResolver
对象是
RowSet
对象,应用程序可以使用所有的
RowSet
方法用于移动光标导航
SyncResolver
对象。例如,应用程序可以使用
RowSet
方法
next
到每一行然后调用
SyncResolver
方法
getStatus
看看行包含冲突。一个或更多的冲突,应用程序可以遍历列找到任何非空值,这将是自相冲突的数据源的值。
为了使它更容易浏览SyncResolver
对象,尤其是当有大量的无冲突的行,SyncResolver
接口定义的方法nextConflict
和previousConflict
,将只包含至少一个价值冲突的行。然后,应用程序可以调用SyncResolver
方法getConflictValue
,提供它的列数,把冲突本身的价值。在下一节中的代码片段给出了一个例子。
RowSet
对象CRS可能尝试同步本身与底层数据源并解决冲突。在
try
块,CRS的调用方法
acceptChanges
,它传递的
Connection
对象反对的论点。如果没有冲突,CRS的变化只是写入数据源。但是,如果有一个冲突,这个方法
acceptChanges
抛出一个
SyncProviderException
对象,和
catch
块生效。在这个例子中,说明了一个
SyncResolver
对象可以用许多方式、方法的
SyncResolver
nextConflict
用于
while
环。循环结束时,
nextConflict
返回
false
,发生时,没有更多的冲突,排在
SyncResolver
对象将旋转变压器。在这个特定的代码片段,旋转变压器看起来已经更新冲突的行(与地位
SyncResolver.UPDATE_ROW_CONFLICT
行),和其他执行这个代码片段只行发生冲突因为CRS试图更新。
旋转变压器光标后移一个冲突的行,更新冲突的方法,getRow
表示当前行数,并为CachedRowSet
对象CRS光标在CRS搬到比较行。通过遍历该行的列在旋转变压器和CRS,价值冲突可以检索和比较,决定哪一个应该坚持。在这个代码片段中,CRS值则是为解决价值,这意味着它将被用来覆盖数据源中的价值冲突。
try {
crs.acceptChanges(con);
} catch (SyncProviderException spe) {
SyncResolver resolver = spe.getSyncResolver();
Object crsValue; // value in the RowSet object
Object resolverValue: // value in the SyncResolver object
Object resolvedValue: // value to be persisted
while(resolver.nextConflict()) {
if(resolver.getStatus() == SyncResolver.UPDATE_ROW_CONFLICT) {
int row = resolver.getRow();
crs.absolute(row);
int colCount = crs.getMetaData().getColumnCount();
for(int j = 1; j <= colCount; j++) {
if (resolver.getConflictValue(j) != null) {
crsValue = crs.getObject(j);
resolverValue = resolver.getConflictValue(j);
. . .
// compare crsValue and resolverValue to determine
// which should be the resolved value (the value to persist)
resolvedValue = crsValue;
resolver.setResolvedValue(j, resolvedValue);
}
}
}
}
}
Modifier and Type | Field and Description |
---|---|
static int |
DELETE_ROW_CONFLICT
表明在
RowSet 对象试图删除数据源中的列发生冲突。
|
static int |
INSERT_ROW_CONFLICT
表明在
RowSet 对象试图在数据源中插入一行发生冲突。
|
static int |
NO_ROW_CONFLICT
表明在
RowSet 对象试图更新
不发生冲突,删除或数据源中插入一行。
|
static int |
UPDATE_ROW_CONFLICT
表明在
RowSet 对象试图在数据源更新一行发生冲突。
|
CLOSE_CURSORS_AT_COMMIT, CONCUR_READ_ONLY, CONCUR_UPDATABLE, FETCH_FORWARD, FETCH_REVERSE, FETCH_UNKNOWN, HOLD_CURSORS_OVER_COMMIT, TYPE_FORWARD_ONLY, TYPE_SCROLL_INSENSITIVE, TYPE_SCROLL_SENSITIVE
Modifier and Type | Method and Description |
---|---|
Object |
getConflictValue(int index)
检索值在指定的列在这
SyncResolver 对象的当前行,这是导致冲突的数据源的值。
|
Object |
getConflictValue(String columnName)
检索值在指定的列在这
SyncResolver 对象的当前行,这是导致冲突的数据源的值。
|
int |
getStatus()
这
SyncResolver 检索当前行的冲突状态,这表明操作的
RowSet 对象是在冲突发生时。
|
boolean |
nextConflict()
将光标从当前位置移动到包含冲突值的下一行。
|
boolean |
previousConflict()
光标在这
SyncResolver 对象从当前位置到以前的冲突的行动。
|
void |
setResolvedValue(int index, Object obj)
设置对象在正在同步的
RowSet 对象的当前行的列值指数。
|
void |
setResolvedValue(String columnName, Object obj)
设置对象在正在同步的
RowSet 对象的当前行的列值列名。
|
addRowSetListener, clearParameters, execute, getCommand, getDataSourceName, getEscapeProcessing, getMaxFieldSize, getMaxRows, getPassword, getQueryTimeout, getTransactionIsolation, getTypeMap, getUrl, getUsername, isReadOnly, removeRowSetListener, setArray, setAsciiStream, setAsciiStream, setAsciiStream, setAsciiStream, setBigDecimal, setBigDecimal, setBinaryStream, setBinaryStream, setBinaryStream, setBinaryStream, setBlob, setBlob, setBlob, setBlob, setBlob, setBlob, setBoolean, setBoolean, setByte, setByte, setBytes, setBytes, setCharacterStream, setCharacterStream, setCharacterStream, setCharacterStream, setClob, setClob, setClob, setClob, setClob, setClob, setCommand, setConcurrency, setDataSourceName, setDate, setDate, setDate, setDate, setDouble, setDouble, setEscapeProcessing, setFloat, setFloat, setInt, setInt, setLong, setLong, setMaxFieldSize, setMaxRows, setNCharacterStream, setNCharacterStream, setNCharacterStream, setNCharacterStream, setNClob, setNClob, setNClob, setNClob, setNClob, setNClob, setNString, setNString, setNull, setNull, setNull, setNull, setObject, setObject, setObject, setObject, setObject, setObject, setPassword, setQueryTimeout, setReadOnly, setRef, setRowId, setRowId, setShort, setShort, setSQLXML, setSQLXML, setString, setString, setTime, setTime, setTime, setTime, setTimestamp, setTimestamp, setTimestamp, setTimestamp, setTransactionIsolation, setType, setTypeMap, setURL, setUrl, setUsername
absolute, afterLast, beforeFirst, cancelRowUpdates, clearWarnings, close, deleteRow, findColumn, first, getArray, getArray, getAsciiStream, getAsciiStream, getBigDecimal, getBigDecimal, getBigDecimal, getBigDecimal, getBinaryStream, getBinaryStream, getBlob, getBlob, getBoolean, getBoolean, getByte, getByte, getBytes, getBytes, getCharacterStream, getCharacterStream, getClob, getClob, getConcurrency, getCursorName, getDate, getDate, getDate, getDate, getDouble, getDouble, getFetchDirection, getFetchSize, getFloat, getFloat, getHoldability, getInt, getInt, getLong, getLong, getMetaData, getNCharacterStream, getNCharacterStream, getNClob, getNClob, getNString, getNString, getObject, getObject, getObject, getObject, getObject, getObject, getRef, getRef, getRow, getRowId, getRowId, getShort, getShort, getSQLXML, getSQLXML, getStatement, getString, getString, getTime, getTime, getTime, getTime, getTimestamp, getTimestamp, getTimestamp, getTimestamp, getType, getUnicodeStream, getUnicodeStream, getURL, getURL, getWarnings, insertRow, isAfterLast, isBeforeFirst, isClosed, isFirst, isLast, last, moveToCurrentRow, moveToInsertRow, next, previous, refreshRow, relative, rowDeleted, rowInserted, rowUpdated, setFetchDirection, setFetchSize, updateArray, updateArray, updateAsciiStream, updateAsciiStream, updateAsciiStream, updateAsciiStream, updateAsciiStream, updateAsciiStream, updateBigDecimal, updateBigDecimal, updateBinaryStream, updateBinaryStream, updateBinaryStream, updateBinaryStream, updateBinaryStream, updateBinaryStream, updateBlob, updateBlob, updateBlob, updateBlob, updateBlob, updateBlob, updateBoolean, updateBoolean, updateByte, updateByte, updateBytes, updateBytes, updateCharacterStream, updateCharacterStream, updateCharacterStream, updateCharacterStream, updateCharacterStream, updateCharacterStream, updateClob, updateClob, updateClob, updateClob, updateClob, updateClob, updateDate, updateDate, updateDouble, updateDouble, updateFloat, updateFloat, updateInt, updateInt, updateLong, updateLong, updateNCharacterStream, updateNCharacterStream, updateNCharacterStream, updateNCharacterStream, updateNClob, updateNClob, updateNClob, updateNClob, updateNClob, updateNClob, updateNString, updateNString, updateNull, updateNull, updateObject, updateObject, updateObject, updateObject, updateObject, updateObject, updateObject, updateObject, updateRef, updateRef, updateRow, updateRowId, updateRowId, updateShort, updateShort, updateSQLXML, updateSQLXML, updateString, updateString, updateTime, updateTime, updateTimestamp, updateTimestamp, wasNull
isWrapperFor, unwrap
static final int UPDATE_ROW_CONFLICT
RowSet
对象试图在数据源更新一行发生冲突。数据源中的列的值进行更新与该行的
RowSet
对象的原始值,这意味着数据源中的列被更新或删除自上次同步。
static final int DELETE_ROW_CONFLICT
RowSet
对象试图删除数据源中的列发生冲突。数据源中的列的值进行更新与该行的
RowSet
对象的原始值,这意味着数据源中的列被更新或删除自上次同步。
static final int INSERT_ROW_CONFLICT
RowSet
对象试图在数据源中插入一行发生冲突。这意味着,自上次同步以来已插入要插入的行具有相同主键的行已被插入到数据源中。
static final int NO_ROW_CONFLICT
RowSet
对象试图更新
不发生冲突,删除或数据源中插入一行。在
SyncResolver
值将包含
null
值只表明没有信息相关的冲突解决这一行。
int getStatus()
SyncResolver
检索当前行的冲突状态,这表明操作的
RowSet
对象是在冲突发生时。
SyncResolver.UPDATE_ROW_CONFLICT
,
SyncResolver.DELETE_ROW_CONFLICT
,
SyncResolver.INSERT_ROW_CONFLICT
,或
SyncResolver.NO_ROW_CONFLICT
Object getConflictValue(int index) throws SQLException
SyncResolver
对象的当前行,这是导致冲突的数据源的值。
index
-
int
指定列在这排这
SyncResolver
对象从中检索造成冲突的价值
SyncResolver
对象的当前行的值
SQLException
-如果一个数据库访问错误发生
Object getConflictValue(String columnName) throws SQLException
SyncResolver
对象的当前行,这是导致冲突的数据源的值。
columnName
-
String
对象指定列在这排这
SyncResolver
对象从中检索造成冲突的价值
SyncResolver
对象的当前行的值
SQLException
-如果一个数据库访问错误发生
void setResolvedValue(int index, Object obj) throws SQLException
RowSet
对象的当前行的列值指数。obj设置为值在数据源内部。
index
-
int
给列成数集的值被保存
obj
-
Object
是设置在
RowSet
对象的值保存在数据源
SQLException
-如果一个数据库访问错误发生
void setResolvedValue(String columnName, Object obj) throws SQLException
RowSet
对象的当前行的列值列名。obj设置为值在数据源内部。
columnName
-
String
对象给予的列的名称设定值被保存
obj
-
Object
是设置在
RowSet
对象的值保存在数据源
SQLException
-如果一个数据库访问错误发生
boolean nextConflict() throws SQLException
SyncResolver
对象的指针最初定位在第一行的方法
nextConflict
冲突;第一个电话是第一个冲突行当前行;第二电话让第二冲突行的当前行,等等。
调用的方法nextConflict
将隐式如果是开放的,将明确SyncResolver
对象的警示链关闭输入流。
true
如果新的当前行是有效的;
false
如果没有更多的行
SQLException
-如果一个数据库访问错误发生或结果集的类型是
TYPE_FORWARD_ONLY
boolean previousConflict() throws SQLException
SyncResolver
对象从当前位置到以前的冲突的行动。
调用的方法previousConflict
将隐式如果是开放的,将明确SyncResolver
对象的警示链关闭输入流。
true
如果光标在一个有效的行;
false
如果是从结果集
SQLException
-如果一个数据库访问错误发生或结果集的类型是
TYPE_FORWARD_ONLY
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.