Spec-Zone .ru
спецификации, руководства, описания, API
 Платформа Java™
Стандарт Эд. 7
javax.sql.rowset.spi

Интерфейсный SyncResolver

С информацией, полученной от методов getStatus и getConflictValue, приложение может сделать определение, относительно которого значение должно быть сохранено в источнике данных. Приложение тогда вызывает SyncResolver метод setResolvedValue, который устанавливает значение, которое будет сохранено в RowSet возразите и также в источнике данных.

     resolver.setResolvedValue("DEPT", 8390426);
 
В предыдущей строке кода имя столбца определяет столбец в RowSet объект, который должен быть установлен с данным значением. Номер столбца может также использоваться, чтобы определять столбец.

Приложение вызывает метод setResolvedValue после того, как это разрешило все конфликты в текущей строке конфликта и повторяет этот процесс для каждой строки конфликта в SyncResolver объект.

Навигация a SyncResolver Объект

Поскольку a SyncResolver объект является a RowSet объект, приложение может использовать весь из RowSet методы для того, чтобы переместить курсор, чтобы переместиться по a SyncResolver объект. Например, приложение может использовать RowSet метод next добраться до каждой строки и затем вызвать SyncResolver метод getStatus видеть, содержит ли строка конфликт. Подряд с одним или более конфликтами, приложение может выполнить итерации через столбцы, чтобы найти любые ненулевые значения, которые будут значениями от источника данных, которые находятся в конфликте.

Облегчить перемещаться по a SyncResolver объект, особенно когда есть большие количества строк без конфликтов, SyncResolver интерфейс определяет методы nextConflict и previousConflict, которые перемещаются только в строки, которые содержат по крайней мере одно значение конфликта. Затем приложение может вызвать SyncResolver метод getConflictValue, предоставление этого с номером столбца, чтобы получить конфликт ценят себя. Фрагмент кода в следующем разделе дает пример.

Пример кода

Следующий фрагмент кода демонстрирует как разъединенный RowSet объект crs мог бы попытаться синхронизировать себя с базовым источником данных и затем разрешить конфликты. В try блок, crs вызывает метод acceptChanges, передача этого Connection объектный довод "против". Если нет никаких конфликтов, изменения в crs просто пишутся источнику данных. Однако, если есть конфликт, метод acceptChanges броски a SyncProviderException объект, и catch блок вступает в силу. В этом примере, который иллюстрирует один из многих путей a SyncResolver объект может использоваться, SyncResolver метод nextConflict используется в a 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);
                      }
                  }
              }
          }
      }
 
Java™ Platform
Standard Ed. 7

Представьте ошибку или функцию
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, 2011, Oracle and/or its affiliates. All rights reserved.