Манипулирование

Доступ к данным

Для получения доступа к данным ячеек сначала получите DataRecord:

DataRecord rec = table.getRecord(5); // The numbering of records is zero-based, so this will return 6th record

 

DataRecord rec = table.rec(); // This returns first record (with zero index)

Теперь вы можете использовать методы, которые возвращают определенные типы значений, для получения значений ячеек:

String s1 = rec.getString("firstField");

 

Boolean b1 = rec.getBoolean("secondField");

 

Integer i1 = rec.getInt("thirdField");

Итерация по записям

Часто бывает необходимо обработать все записи таблицы. DataTable легко выполняет эту задачу с помощью интерфейса Iterable:

for(DataRecord rec : table)

{

  // Process the record

}

Для экземпляра ResultSetDataTable на основе набора результатов типа ResultSet.TYPE_FORWARD_ONLY, разрешена только одна операция доступа, то есть только одна итерация по записям данных. Для таких таблиц невозможно получить запись данных каким-либо другим способом (например, методами rec() или getRecord(int)). Также невозможна любая другая операция, требующая изменения координат положения курсора в наборе результатов (например, методы findIndex(DataTableQuery) или isOneCellTable()).

Клонирование таблиц и элементов таблиц

Метод clone() работает по-разному для разных подтипов DataTable:

Для SimpleDataTable, метод возвращает полную копию экземпляра. Тип клонированного экземпляра также SimpleDataTable.

Для экземпляров таблиц ResultSetDataTable, FilteringDataTable или ProxyDataTable, метод возвращает SimpleDataTable, содержащую клоны записей, представленных в оригинальной таблице на момент клонирования.

Обратите внимание, что метод clone() в ResultSetDataTable, FilteringDataTable и ProxyDataTable не вызывает super.clone(). Помните, что если вы решите расширить любой из этих классов, вызов super.clone() в дочернем классе может не дать ожидаемого результата копирования.

Также возможно клонировать запись или формат таблицы:

DataTable clonedTable = table.clone();

 

DataRecord clonedRecord = table.rec().clone();

TableFormat clonedFormat = table.getFormat().clone();

Кодирование и декодирование таблиц

Кодирование таблиц данных работает по-разному для разных подтипов DataTable:

Любую SimpleDataTable можно закодировать в строку и восстановить без потери данных. Экземпляр SimpleDataTable кодируется совместно со всеми ее записями.

Для кодирования и декодирования SimpleDataTable используйте следующий код:

String encodedTable = table.encode(false); // false means don't use visible separators

 

DataTable restored = new SimpleDataTable(encodedTable);

Экземпляры ResultSetDataTable или FilteringDataTable кодируются по-другому. Их записи не кодируются, вместо этого кодируются их идентификаторы. Эти ID позволяют соответствующей ProxyDataTable расположить таблицу на Сервере и получить доступ к нужным записям.

Экземпляры ProxyDataTable не кодируются, так как не требуют такой операции.

Отбор яйчеек таблиц

Для нахождения первой записи, имеющей значение поля Integer field1, равное 123, используйте следующий код:

DataRecord rec = table.select("field1", 123);

Если такая запись не найдена, данный метод вернет null.

Сортировка таблиц

Сортировать модно только экземпляры SimpleDataTable. Для сортировки SimpleDataTable в соответствии со значениями поля field1, используйте этот код:

table.sort("field1", true); // Ascending sort order

Для сортировки таблицы данных отличного от SimpleDataTable типа, сначала клонируйте ее, чтобы получить SimpleDataTable копию оригинальной таблицы, а затем отсортируйте клонированный экземпляр.

Дублирование таблиц

Часто бывает необходимо копировать данные в разных таблицах. Прежде всего, DataTable можно клонировать (см. выше).

Однако более расширенные операции дублирования таблиц доступны как статические методы класса DataTableReplication:

  • Методы семейств copy() копируют данные из одной таблицы в другую, сохраняя ключевые поля, доступные только для чтения и не предназначенные для дублирования поля, минимальное/максимальное количество записей и прочее
  • Методы семейств copyRecord() дублируют данные из одной DataRecord в другую, также сохраняя большинство опций

Расширенные операции

Некоторые расширенные операции таблицы, такие как создание таблиц из списков значений или обработка привязок таблицы, доступны в двух вспомогательных классах с открытым исходным кодом: DataTableBuilding и DataTableUtils.