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, setUsernameabsolute, 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, wasNullisWrapperFor, unwrapstatic 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.