JavaTM Platform
Standard Ed. 6

javax.sql.rowset.spi
�ӿ� SyncResolver

���г����ӿڣ�
ResultSet, RowSet, Wrapper

public interface SyncResolver
extends RowSet

����һ����ܣ�������ͬ����ͻʱ��������Ӧ�ó���ʹ���ֹ���������ȷ��Ӧ��ִ�еIJ�������ȻӦ�ó����ֹ����ͬ����ͻ������ί�й��̣����˿�ܻ����ṩ��һЩ������ͻʱί��Ӧ�ó���ķ�����

ע�⣬��ͻ��ָ RowSet �����ԭʼ��ֵ������Դ�е�ֵ��ƥ����������ָʾ�����һ��ͬ����������Դ���ѱ��޸ġ���Ҫע�⣬RowSet �����ԭʼֵ�������һ��ͬ��֮ǰ��ֵ�����������ʼֵ��

SyncResolver ���������

SyncResolver ������ʵ�� SyncResolver �ӿڵ�ר�� RowSet ���������������ӵ� RowSet ����JdbcRowSet �ӿڵ�ʵ�֣�������� RowSet ����CachedRowSet �ӿڻ���һ���ӽӿڵ�ʵ�֣�����ʽ���в������й��ӽӿڵ���Ϣ������� javax.sql.rowset ��������SyncResolver �IJο�ʵ��ʵ���� CachedRowSet �ӿڣ���������ʵ�ֿ���ѡ��ʵ�� JdbcRowSet �ӿڣ��������ض�����Ҫ��

Ӧ�ó�����ʹ RowSet ����������Դͬ����ͨ������ CachedRowSet ���� acceptChanges���������ҵ�һ��������ͻ֮��rowset �� SyncProvider ����ᴴ��һ�� SyncResolver ʵ������һ�µ� SyncResolver ������������ڳ���ͬ���� RowSet ������ͬ��������������SyncResolver �����������Դ�е��³�ͻ��ֵ������ֵ��Ϊ null�����⣬����������ÿ����ͻ����Ϣ��

��ȡ��ʹ�� SyncResolver ����

������ acceptChanges ������ͻʱ��SyncProvider ����ᴴ�� SyncProviderException ���󣬲�ʹ���µ� SyncResolver ���������������� acceptChanges ���׳����쳣��Ȼ��Ӧ�ó�����Բ����������Ի�ȡ�������� SyncResolver �������´���Ƭ��ʹ�� SyncProviderException ���� getSyncResolver ����ȡ SyncResolver ���� resolver��
     } catch (SyncProviderException spe) {
         SyncResolver resolver = spe.getSyncResolver();
     ...
     }
 

ͨ����ӵ�е� resolver��Ӧ�ó������ʹ������ȡ���ڳ�ͻ����Ϣ��SyncResolver ������ resolver�����ٴ��ڳ�ͻ��ÿ�����еij�ͻ���������������� rowset ����Ӱ��ı����Ա��ڽ����ǰ��ͻʱ���ٷ���������ͻ��

���Դ� SyncResolver �����ȡ���¼�����Ϣ��

  • ������ͻʱ����ͼ���еIJ���
    SyncProvider �ӿڶ������ĸ��������������ܷ�����״̬���������������������ֳ�ͻʱ RowSet ��������ͼִ�еIJ������ͣ����¡�ɾ������룩�����ĸ�����ָʾ�����ڳ�ͻ���� SyncResolver ������÷��� getStatus ʱ����Щ�������ǿ��ܵķ���ֵ��
         int operation = resolver.getStatus();
     

  • ����Դ�е��³�ͻ��ֵ
    �� RowSet ������IJ�����д�뵽����Դ��ֵ����һ��ͬ������Ҳ������Դ�б�����ʱ���ᷢ����ͻ��Ӧ�ó�����Ե��� SyncResolver �ķ��� getConflictValue����ȡ����Դ�е��³�ͻ��ֵ����Ϊ SyncResolver �����е�ֵ��ȡ������Դ�ij�ͻֵ��
         java.lang.Object conflictValue = resolver.getConflictValue(2);
     
    ע�⣬resolver �е��п���ʹ���к�ָ���������ϴ���������ʾ����Ҳ������������ָ����

    ʹ�ôӷ��� getStatus �� getConflictValue ��ȡ������Ϣ��Ӧ�ó����������Ӧ������Դ�б�����һ��ֵ�ľ�����Ȼ��Ӧ�ó������ SyncResolver �ķ��� setResolvedValue������������ RowSet �����к�����Դ��Ҫ������ֵ��

         resolver.setResolvedValue("DEPT", 8390426);
     
    �����ϴ������У�������ָ�� RowSet ������Ҫʹ�ø���ֵ���õ��С�Ҳ�������к���ָ���С�

    �����ǰ��ͻ���е����г�ͻ֮��Ӧ�ó������÷��� setResolvedValue������ SyncResolver ������ÿ����ͻ���ظ��˹��̡�

    ���� SyncResolver ����

    ��Ϊ SyncResolver ������ RowSet ��������Ӧ�ó������ʹ�����е� RowSet �����ƶ�ָ�������� SyncResolver �������磬Ӧ�ó������ʹ�� RowSet �ķ��� next ����ÿ���У�Ȼ����� SyncResolver �ķ��� getStatus �鿴���Ƿ������ͻ���ھ���һ��������ͻ�����У�Ӧ�ó�����Ե������������κη� null ֵ������������Դ�д��ڳ�ͻ״̬��ֵ��

    Ҫʹ���� SyncResolver ��������ף������Ǵ��ڴ���û�г�ͻ����ʱ��SyncResolver �ӿڶ����˷��� nextConflict �� previousConflict������ֻ�ƶ������ٰ���һ����ͻֵ���С�Ȼ��Ӧ�ó���ͨ���ṩ�к���Ϊ�������� SyncResolver �ķ��� getConflictValue���Ի�ȡ��ͻֵ��������һ���еĴ���Ƭ�θ�����һ��ʾ����

    ����ʾ��

    ���´���Ƭ����ʾ������ RowSet ���� crs ��γ���ʹ������ײ�����Դͬ����Ȼ������ͻ���� try ���У�crs ���÷��� acceptChanges���� Connection ���� con ���ݸ�������������ڳ�ͻ���� crs �еĸ���д�뵽����Դ���ɡ����ǣ�������ڳ�ͻ���򷽷� acceptChanges ���׳� SyncProviderException ����catch ����Ч���ڴ�ʾ���У������˶��� SyncResolver ����ʹ�÷�ʽ�е�һ�֣��� while ѭ���У�ʹ�� SyncResolver �ķ��� nextConflict��nextConflict ���� false ʱѭ������ֹ���ⷢ���� SyncResolver ���� resolver �в����г�ͻ��ʱ���ڴ��ض��Ĵ���Ƭ���У�resolver �����и��³�ͻ���У�״̬Ϊ SyncResolver.UPDATE_ROW_CONFLICT ���У����˴���Ƭ�����ಿ�ֽ�ִ������ crs ���Ը��¶�������ͻ���С�

    resolver ��ָ���ƶ����и��³�ͻ����һ����ͻ��֮�󣬷��� getRow ָʾ��ǰ�е����֣����ҽ� CachedRowSet ���� crs ��ָ���Ƶ� crs �еĶԵ��С�ͨ������ resolver �� crs ���е��У����Ի�ȡ�ͱȽϳ�ͻֵ����ȷ��Ӧ������һ��ֵ���ڴ˴���Ƭ���У�crs �е�ֵ������Ϊ���ֵ��ֵ������ζ������������д����Դ�еij�ͻֵ��

         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);
                          } 
                      } 
                  }
              }
          }
     


    �ֶ�ժҪ
    static int DELETE_ROW_CONFLICT
              ָʾ�� RowSet ������ͼɾ������Դ�е���ʱ������ͻ��
    static int INSERT_ROW_CONFLICT
              ָʾ�� RowSet ������ͼ���в�������Դ��ʱ������ͻ��
    static int NO_ROW_CONFLICT
              ָʾ�� RowSet ������ͼ���¡�ɾ�����������Դ�е���ʱ�������κγ�ͻ��
    static int UPDATE_ROW_CONFLICT
              ָʾ�� RowSet ������ͼ��������Դ�е���ʱ������ͻ��
     
    �ӽӿ� java.sql.ResultSet �̳е��ֶ�
    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
     
    ����ժҪ
     Object getConflictValue(int index)
              ��ȡ�� SyncResolver ����ĵ�ǰ����ָ���е�ֵ����������Դ�е��³�ͻ��ֵ��
     Object getConflictValue(String columnName)
              ��ȡ�� SyncResolver ����ĵ�ǰ����ָ���е�ֵ����������Դ�е��³�ͻ��ֵ��
     int getStatus()
              ��ȡ�� SyncResolver �ĵ�ǰ�еij�ͻ״̬����ָʾ�ڷ�����ͻʱ RowSet ���������ԵIJ�����
     boolean nextConflict()
              ��ָ����䵱ǰλ���ƶ�����һ��������ͻֵ���С�
     boolean previousConflict()
              ��ָ����䵱ǰλ���ƶ����� SyncResolver ��������һ����ͻ�С�
     void setResolvedValue(int index, Object obj)
              �� obj ����Ϊ��ͬ���� RowSet ����ǰ���е� index �е�ֵ��
     void setResolvedValue(String columnName, Object obj)
              �� obj ����Ϊ��ͬ���� RowSet ����ǰ������ columnName ��ֵ��
     
    �ӽӿ� javax.sql.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
     
    �ӽӿ� java.sql.ResultSet �̳еķ���
    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, 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, updateRef, updateRef, updateRow, updateRowId, updateRowId, updateShort, updateShort, updateSQLXML, updateSQLXML, updateString, updateString, updateTime, updateTime, updateTimestamp, updateTimestamp, wasNull
     
    �ӽӿ� java.sql.Wrapper �̳еķ���
    isWrapperFor, unwrap
     

    �ֶ���ϸ��Ϣ

    UPDATE_ROW_CONFLICT

    static final int UPDATE_ROW_CONFLICT
    ָʾ�� RowSet ������ͼ��������Դ�е���ʱ������ͻ������Դ����Ҫ���µ�ֵ��ͬ�ڸ��е� RowSet �����ԭʼֵ������ζ������һ��ͬ�������Ѹ��»�ɾ��������Դ�е��С�

    ������
    �����ֶ�ֵ

    DELETE_ROW_CONFLICT

    static final int DELETE_ROW_CONFLICT
    ָʾ�� RowSet ������ͼɾ������Դ�е���ʱ������ͻ������Դ����Ҫ���µ�ֵ��ͬ�ڸ��е� RowSet �����ԭʼֵ������ζ������һ��ͬ�������Ѹ��»�ɾ��������Դ�е��С�

    ������
    �����ֶ�ֵ

    INSERT_ROW_CONFLICT

    static final int INSERT_ROW_CONFLICT
    ָʾ�� RowSet ������ͼ���в�������Դ��ʱ������ͻ������ζ������һ��ͬ�������Ѿ�������Դ�в�����һ����Ҫ������о�����ͬ�������С�

    ������
    �����ֶ�ֵ

    NO_ROW_CONFLICT

    static final int NO_ROW_CONFLICT
    ָʾ�� RowSet ������ͼ���¡�ɾ�����������Դ�е���ʱ�������κγ�ͻ��SyncResolver �е�ֵ������ null ֵ����ֵ��ָʾ������û�й��ڳ�ͻ�������Ϣ��

    ������
    �����ֶ�ֵ
    ������ϸ��Ϣ

    getStatus

    int getStatus()
    ��ȡ�� SyncResolver �ĵ�ǰ�еij�ͻ״̬����ָʾ�ڷ�����ͻʱ RowSet ���������ԵIJ�����

    ���أ�
    ���³���֮һ��SyncResolver.UPDATE_ROW_CONFLICT��SyncResolver.DELETE_ROW_CONFLICT��SyncResolver.INSERT_ROW_CONFLICT �� SyncResolver.NO_ROW_CONFLICT

    getConflictValue

    Object getConflictValue(int index)
                            throws SQLException
    ��ȡ�� SyncResolver ����ĵ�ǰ����ָ���е�ֵ����������Դ�е��³�ͻ��ֵ��

    ������
    index - һ�� int����ָ���� SyncResolver ����Ĵ����е��У��Ӹ��п��Ի�ȡ���³�ͻ��ֵ
    ���أ�
    �� SyncResolver ����ĵ�ǰ����ָ���е�ֵ
    �׳���
    SQLException - ����������ݿ���ʴ���

    getConflictValue

    Object getConflictValue(String columnName)
                            throws SQLException
    ��ȡ�� SyncResolver ����ĵ�ǰ����ָ���е�ֵ����������Դ�е��³�ͻ��ֵ��

    ������
    columnName - String ������ָ���� SyncResolver ����Ĵ����е��У��Ӹ��п��Ի�ȡ���³�ͻ��ֵ
    ���أ�
    �� SyncResolver ����ĵ�ǰ����ָ���е�ֵ
    �׳���
    SQLException - ����������ݿ���ʴ���

    setResolvedValue

    void setResolvedValue(int index,
                          Object obj)
                          throws SQLException
    �� obj ����Ϊ��ͬ���� RowSet ����ǰ���е� index �е�ֵ���� obj �ڲ�������Ϊ����Դ�е�ֵ��

    ������
    index - һ�� int�����ṩҪ���ñ���ֵ���к�
    obj - һ�� Object�������� RowSet ���������õ�ֵ����������������Դ��
    �׳���
    SQLException - ����������ݿ���ʴ���

    setResolvedValue

    void setResolvedValue(String columnName,
                          Object obj)
                          throws SQLException
    �� obj ����Ϊ��ͬ���� RowSet ����ǰ������ columnName ��ֵ���� obj �ڲ�������Ϊ����Դ�е�ֵ��

    ������
    columnName - String �������ṩҪ���ñ���ֵ��������
    obj - һ�� Object�������� RowSet ���������õ�ֵ����������������Դ��
    �׳���
    SQLException - ����������ݿ���ʴ���

    nextConflict

    boolean nextConflict()
                         throws SQLException
    ��ָ����䵱ǰλ���ƶ�����һ��������ͻֵ���С�SyncResolver �����ָ�����λ�ڵ�һ����ͻ��֮ǰ����һ�ε��� nextConflict ����ʹ��һ����ͻ�г�Ϊ��ǰ�У��ڶ��ε���ʹ�ڶ�����ͻ�г�Ϊ��ǰ�У��������ơ�

    ���÷��� nextConflict ����ʽ�ر�������������д򿪵��������������ҽ���� SyncResolver ����ľ�������

    ���أ�
    ����µĵ�ǰ����Ч���򷵻� true�������������һ�У��򷵻� false
    �׳���
    SQLException - ����������ݿ���ʴ��󣬻��߽��������Ϊ TYPE_FORWARD_ONLY

    previousConflict

    boolean previousConflict()
                             throws SQLException
    ��ָ����䵱ǰλ���ƶ����� SyncResolver ��������һ����ͻ�С�

    ���÷��� previousConflict ����ʽ�ر�������������д򿪵��������������ҽ���� SyncResolver ����ľ�������

    ���أ�
    ���ָ��λ����Ч���ϣ��򷵻� true����������ڽ�����У��򷵻� false
    �׳���
    SQLException - ����������ݿ���ʴ��󣬻��߽��������Ϊ TYPE_FORWARD_ONLY

    JavaTM Platform
    Standard Ed. 6

    �ύ��������
    �йظ���� API �ο����ϺͿ�����Ա�ĵ�������� Java SE ������Ա�ĵ������ĵ���������ϸ�ġ����򿪷���Ա���������Լ�������������ﶨ�塢ʹ�ü��ɺ͹�������ʾ����

    ��Ȩ���� 2007 Sun Microsystems, Inc. ��������Ȩ���� ����������֤��������������ĵ����·ַ�������