Spec-Zone.ru › OpenJDK 25

Интерфейс CachedRowSet

Все суперинтерфейсы:
AutoCloseable, Joinable, ResultSet, RowSet, Wrapper
Все известные подинтерфейсы:
FilteredRowSet, JoinRowSet, WebRowSet
public interface CachedRowSet extends RowSet, Joinable
Интерфейс, который должны реализовывать все стандартные реализации CachedRowSet.

Эталонная реализация интерфейса CachedRowSet, предоставляемая корпорацией Oracle, является стандартной реализацией. Разработчики могут использовать эту реализацию без изменений, расширять её или создавать собственные реализации этого интерфейса.

Объект CachedRowSet — это контейнер строк данных, кэшируемых в памяти, что позволяет работать с ним, не поддерживая постоянное подключение к источнику данных. Кроме того, это компонент JavaBeans, поддерживающий прокрутку, обновление и сериализацию. Объект CachedRowSet обычно содержит строки из результирующего набора, но также может содержать строки из любого файла с табличным форматом, например электронной таблицы. Эталонная реализация поддерживает получение данных только из объекта ResultSet, однако разработчики могут расширить реализации SyncProvider, чтобы обеспечить доступ к другим табличным источникам данных.

Приложение может изменять данные в объекте CachedRowSet, а затем эти изменения могут быть переданы обратно в источник данных.

Объект CachedRowSet — это отключённый набор строк, то есть он использует подключение к источнику данных лишь в течение короткого времени. Он подключается к источнику данных при чтении данных для заполнения строк, а затем снова — при передаче изменений в базовый источник данных. В остальное время объект CachedRowSet отключён, в том числе и при изменении его данных. Благодаря отключению объект RowSet становится значительно легче и его гораздо проще передавать другому компоненту. Например, отключённый объект RowSet можно сериализовать и передать по сети тонкому клиенту, например персональному цифровому помощнику (PDA).

1.0 Создание объекта CachedRowSet

Следующая строка кода использует конструктор по умолчанию для CachedRowSet, предоставляемый эталонной реализацией (RI), чтобы создать объект CachedRowSet со значениями по умолчанию.
    CachedRowSetImpl crs = new CachedRowSetImpl();
У этого нового объекта CachedRowSet будут заданы свойства по умолчанию объекта BaseRowSet, а также объект RIOptimisticProvider в качестве поставщика синхронизации. RIOptimisticProvider — одна из двух реализаций SyncProvider, включённых в RI; это поставщик по умолчанию, который предоставит синглтон SyncFactory, если поставщик синхронизации не указан.

Объект SyncProvider предоставляет объекту CachedRowSet средство чтения (объект RowSetReader) для чтения данных из источника данных и заполнения ими объекта. Средство чтения можно реализовать для чтения данных из объекта ResultSet или из файла с табличным форматом. Объект SyncProvider также предоставляет средство записи (объект RowSetWriter) для синхронизации изменений данных объекта CachedRowSet, внесённых во время его отключения, с данными в базовом источнике данных.

Средство записи можно реализовать так, чтобы оно с разной степенью тщательности проверяло наличие конфликтов и предотвращало их. (Конфликт возникает, если значение в источнике данных изменилось после того, как набор строк был заполнен этим значением.) Реализация RIOptimisticProvider предполагает, что конфликтов будет мало или не будет вовсе, поэтому блокировки не устанавливаются. Она обновляет источник данных значениями из объекта CachedRowSet только при отсутствии конфликтов. Другие средства записи можно реализовать так, чтобы они всегда записывали изменённые данные в источник данных. Этого можно добиться либо отказавшись от проверки конфликтов, либо, на противоположном конце спектра, установив блокировки, достаточные для предотвращения изменения данных в источнике данных. Возможны и другие реализации средств записи, занимающие промежуточное положение.

Объект CachedRowSet может использовать любую реализацию SyncProvider, зарегистрированную в синглтоне SyncFactory. Приложение может узнать, какие реализации SyncProvider зарегистрированы, выполнив следующую строку кода.

     java.util.Enumeration providers = SyncFactory.getRegisteredProviders();

Объект CachedRowSet может указать используемый объект SyncProvider двумя способами.

  • Передать имя реализации конструктору
    Следующая строка кода создаёт объект CachedRowSet crs2, инициализированный значениями по умолчанию, за исключением того, что его объектом SyncProvider будет указанный объект.
             CachedRowSetImpl crs2 = new CachedRowSetImpl(
                                    "com.fred.providers.HighAvailabilityProvider");
        
  • Задать SyncProvider с помощью метода CachedRowSet setSyncProvider
    Следующая строка кода сбрасывает объект SyncProvider для crs — объекта CachedRowSet, созданного конструктором по умолчанию.
              crs.setSyncProvider("com.fred.providers.HighAvailabilityProvider");
         
Подробнее см. комментарии к SyncFactory и SyncProvider.

2.0 Получение данных из объекта CachedRowSet

Данные из объекта CachedRowSet извлекаются с помощью методов получения, унаследованных от интерфейса ResultSet. В следующих примерах, где crs — это объект CachedRowSet, показано, как перебирать строки и получать значения столбцов в каждой строке. В первом примере используется вариант методов получения, принимающий номер столбца; во втором — вариант, принимающий имя столбца. Номера столбцов обычно используются, когда команда объекта RowSet имеет вид SELECT * FROM TABLENAME; имена столбцов чаще всего используются, когда в команде столбцы указаны по именам.
   while (crs.next()) {
       String name = crs.getString(1);
       int id = crs.getInt(2);
       Clob comment = crs.getClob(3);
       short dept = crs.getShort(4);
       System.out.println(name + "  " + id + "  " + comment + "  " + dept);
   }
   while (crs.next()) {
       String name = crs.getString("NAME");
       int id = crs.getInt("ID");
       Clob comment = crs.getClob("COM");
       short dept = crs.getShort("DEPT");
       System.out.println(name + "  " + id + "  " + comment + "  " + dept);
   }

2.1 Получение RowSetMetaData

Приложение может получить сведения о столбцах объекта CachedRowSet, вызвав методы ResultSetMetaData и RowSetMetaData объекта RowSetMetaData. Следующий фрагмент кода, в котором crs — это объект CachedRowSet, иллюстрирует этот процесс. Первая строка создаёт объект RowSetMetaData со сведениями о столбцах в crs. Метод getMetaData, унаследованный от интерфейса ResultSet, возвращает объект ResultSetMetaData, который приводится к типу объекта RowSetMetaData перед присваиванием переменной rsmd. Во второй строке определяется количество столбцов в jrs, а в третьей — тип JDBC значений, хранящихся во втором столбце jrs.
    RowSetMetaData rsmd = (RowSetMetaData)crs.getMetaData();
    int count = rsmd.getColumnCount();
    int type = rsmd.getColumnType(2);
Интерфейс RowSetMetaData отличается от интерфейса ResultSetMetaData двумя особенностями.
  • Он включает методы setter: Объект RowSet использует эти методы внутри себя при заполнении данными из другого объекта ResultSet.
  • Он содержит меньше методов getter: Некоторые методы ResultSetMetaData неприменимы к объекту RowSet. Например, методы, возвращающие сведения о том, доступна ли запись в столбец или доступен ли он только для чтения, неприменимы, поскольку все столбцы объекта RowSet доступны для записи или только для чтения в зависимости от того, поддерживает ли набор строк обновление.
ПРИМЕЧАНИЕ: Чтобы возвращать объект RowSetMetaData, реализации должны переопределить метод getMetaData(), определённый в java.sql.ResultSet, и возвращать объект RowSetMetaData.

3.0 Обновление объекта CachedRowSet

Обновление объекта CachedRowSet похоже на обновление объекта ResultSet, но, поскольку набор строк не подключён к источнику данных во время обновления, для применения изменений в базовом источнике данных требуется дополнительный шаг. После вызова метода updateRow или insertRow объект CachedRowSet должен также вызвать метод acceptChanges, чтобы записать обновления в источник данных. В следующем примере, где курсор находится на строке объекта CachedRowSet crs, показан код для обновления значений двух столбцов в текущей строке и обновления базового источника данных объекта RowSet.
    crs.updateShort(3, 58);
    crs.updateInt(4, 150000);
    crs.updateRow();
    crs.acceptChanges();

В следующем примере показано, как перейти к строке вставки, создать новую строку в строке вставки, вставить её в набор строк, а затем вызвать метод acceptChanges, чтобы добавить новую строку в базовый источник данных. Обратите внимание: как и методы получения, методы обновления могут принимать индекс столбца или его имя для указания столбца, над которым выполняется действие.

    crs.moveToInsertRow();
    crs.updateString("Name", "Shakespeare");
    crs.updateInt("ID", 10098347);
    crs.updateShort("Age", 58);
    crs.updateInt("Sal", 150000);
    crs.insertRow();
    crs.moveToCurrentRow();
    crs.acceptChanges();

ПРИМЕЧАНИЕ: Место, в которое метод insertRow() вставляет содержимое строки вставки объекта CachedRowSet, определяется реализацией. Эталонная реализация интерфейса CachedRowSet вставляет новую строку сразу после текущей, однако её можно реализовать так, чтобы новые строки вставлялись в любое другое место.

Ещё один важный момент в этих примерах — использование метода acceptChanges. Именно этот метод передаёт изменения объекта CachedRowSet обратно в базовый источник данных, вызывая внутри себя средство записи объекта RowSet для внесения изменений в источник данных. Для этого средству записи приходится устанавливать соединение с источником данных. В двух предыдущих фрагментах кода метод acceptChanges вызывается сразу после вызова updateRow или insertRow. Однако при изменении нескольких строк эффективнее вызвать acceptChanges после всех вызовов updateRow и insertRow. Если вызвать acceptChanges только один раз, потребуется установить лишь одно соединение.

4.0 Обновление базового источника данных

При выполнении метода acceptChanges средство записи объекта CachedRowSet — объект RowSetWriterImpl — незаметно для пользователя вызывается для записи изменений, внесённых в набор строк, в базовый источник данных. Средство записи реализуется так, чтобы устанавливать соединение с источником данных и записывать в него обновления.

Средство записи предоставляется реализацией интерфейса SyncProvider, как описано в разделе 1 «Создание объекта CachedRowSet». В поставщике эталонной реализации по умолчанию, RIOptimisticProvider, средство записи реализовано с использованием механизма оптимистичного управления параллелизмом. Это означает, что пока набор строк отключён от базы данных, блокировки в базовой базе данных не поддерживаются; вместо этого перед записью данных в источник проверяется наличие конфликтов. При наличии конфликтов данные в источник не записываются.

Механизм чтения и записи, предоставляемый классом SyncProvider, является подключаемым, что позволяет настраивать получение и обновление данных. Если требуется другой механизм управления параллелизмом, можно подключить другую реализацию SyncProvider с помощью метода setSyncProvider.

Для использования процедуры оптимистичного управления параллелизмом объект RIOptimisticProvider хранит как текущее, так и исходное значение (значение, которое было непосредственно перед текущим). Обратите внимание: если данные объекта RowSet не изменялись, его текущие и исходные значения совпадают и оба соответствуют значениям, которыми объект RowSet был заполнен изначально. Однако после изменения любого значения в объекте RowSet текущие и исходные значения различаются, хотя на этом этапе исходными значениями по-прежнему остаются первоначальные значения. При последующих изменениях данных объекта RowSet исходные и текущие значения также будут различаться, но исходными значениями станут те, которые ранее были текущими.

Отслеживание исходных значений позволяет средству записи сравнить исходное значение объекта RowSet со значением в базе данных. Если значения в базе данных отличаются от исходных значений объекта RowSet, то есть если значения в базе данных изменились, возникает конфликт. Проверяет ли средство записи конфликты, насколько тщательно оно это делает и как обрабатывает конфликты — всё это зависит от его реализации.

5.0 Регистрация и уведомление слушателей

Поскольку все наборы строк являются компонентами JavaBeans, они участвуют в модели событий JavaBeans и наследуют от класса BaseRowSet методы регистрации слушателей и уведомления их об изменениях. Слушатель объекта CachedRowSet — это компонент, которому нужно получать уведомления об изменениях в наборе строк. Например, если объект CachedRowSet содержит результаты запроса, отображаемые, скажем, в таблице и на гистограмме, их можно зарегистрировать как слушателей набора строк, чтобы они могли обновляться при изменении данных. Чтобы стать слушателями, классы таблицы и гистограммы должны реализовать интерфейс RowSetListener. Затем их можно добавить в список слушателей объекта CachedRowSet, как показано в следующих строках кода.
   crs.addRowSetListener(table);
   crs.addRowSetListener(barGraph);
Каждый метод CachedRowSet, перемещающий курсор или изменяющий данные, также уведомляет зарегистрированных слушателей об изменениях, поэтому table и barGraph получат уведомление при изменении crs.

6.0 Передача данных тонким клиентам

Одна из основных причин использовать объект CachedRowSet — передача данных между различными компонентами приложения. Поскольку объект CachedRowSet поддерживает сериализацию, его можно использовать, например, для отправки результата запроса, выполненного компонентом Enterprise JavaBeans на сервере, по сети клиенту, работающему в веб-браузере.

В отключённом состоянии объект CachedRowSet может быть значительно легче объекта ResultSet с теми же данными. Поэтому он особенно подходит для отправки данных тонкому клиенту, например PDA, где использование драйвера JDBC нецелесообразно из-за ограничений ресурсов или соображений безопасности. Таким образом, объект CachedRowSet позволяет «получать строки», не реализуя весь API JDBC.

7.0 Прокрутка и обновление

Ещё одно важное применение объектов CachedRowSet — обеспечение прокрутки и обновления для объектов ResultSet, которые сами по себе не поддерживают эти возможности. Иными словами, объект CachedRowSet можно использовать для расширения возможностей драйвера с поддержкой технологии JDBC (далее — «драйвер JDBC»), если СУБД не обеспечивает полноценную поддержку прокрутки и обновления. Чтобы обеспечить прокрутку и обновление для непрокручиваемого набора ResultSet, доступного только для чтения, программисту достаточно создать объект CachedRowSet и заполнить его данными этого объекта ResultSet. Это показано в следующем фрагменте кода, где stmt — объект Statement.
   ResultSet rs = stmt.executeQuery("SELECT * FROM EMPLOYEES");
   CachedRowSetImpl crs = new CachedRowSetImpl();
   crs.populate(rs);

Теперь объект crs содержит данные из таблицы EMPLOYEES, как и объект rs. Разница в том, что курсор объекта crs можно перемещать вперёд, назад или к определённой строке, даже если курсор объекта rs можно перемещать только вперёд. Кроме того, объект crs поддерживает обновление, даже если объект rs его не поддерживает, поскольку по умолчанию объект CachedRowSet поддерживает и прокрутку, и обновление.

Итак, объект CachedRowSet можно представить как отключённый набор строк, кэшируемый вне источника данных. Будучи компактным и поддерживая сериализацию, его можно без труда передать по сети; он хорошо подходит для отправки данных тонкому клиенту. Однако у объекта CachedRowSet есть ограничение: его размер ограничен объёмом данных, который он может одновременно хранить в памяти.

8.0 Универсальный доступ к данным

Ещё одно преимущество класса CachedRowSet заключается в том, что он позволяет получать и хранить данные из источников, отличных от реляционной базы данных. Средство чтения набора строк можно реализовать для чтения данных из любого табличного источника и заполнения ими набора строк, включая электронные таблицы и плоские файлы. Поскольку объект CachedRowSet и его метаданные можно создать с нуля, компонент, выполняющий роль фабрики наборов строк, может использовать эту возможность для создания набора строк с данными из источников, не использующих SQL. Тем не менее предполагается, что чаще всего объекты CachedRowSet будут содержать данные, полученные из базы данных SQL с помощью API JDBC.

9.0 Настройка свойств

Все наборы строк хранят набор свойств, которые обычно задаются с помощью инструмента. Количество и типы свойств набора строк зависят от его назначения и способа получения данных. Например, наборы строк, получающие данные из объекта ResultSet, должны задавать свойства, необходимые для подключения к базе данных. Если набор строк использует для подключения механизм DriverManager, ему необходимо задать свойство URL JDBC, указывающее соответствующий драйвер, а также свойства с именем пользователя и паролем. Если же для подключения набор строк использует объект DataSource, что является предпочтительным способом, задавать свойство URL JDBC не нужно. Вместо этого необходимо задать свойства с логическим именем источника данных, именем пользователя и паролем.

ПРИМЕЧАНИЕ: Чтобы использовать объект DataSource для подключения, объект DataSource должен быть зарегистрирован в службе именования, использующей API Java Naming and Directory Interface (JNDI). Обычно эту регистрацию выполняет системный администратор.

Чтобы заполнить набор строк данными из базы данных, необходимо задать свойство команды. Это свойство представляет собой запрос — объект PreparedStatement, который позволяет использовать в запросе заполнители параметров, задаваемые во время выполнения, а не на этапе проектирования. Для задания значений этих параметров-заполнителей набор строк предоставляет методы установки значений для каждого типа данных, подобные методам установки, предусмотренным интерфейсом PreparedStatement.

В следующем фрагменте кода показано, как можно задать свойство команды объекта CachedRowSet crs. Обратите внимание: если для задания свойств используется инструмент, он будет применять именно этот код.

   crs.setCommand("SELECT FIRST_NAME, LAST_NAME, ADDRESS FROM CUSTOMERS " +
                  "WHERE CREDIT_LIMIT > ? AND REGION = ?");
 

Значения, которые будут использоваться для задания параметров-заполнителей команды, содержатся в поле params объекта RowSet, которое является объектом Vector. Класс CachedRowSet предоставляет набор методов установки для задания элементов поля params. В следующем фрагменте кода показано, как задать два параметра запроса из предыдущего примера.

   crs.setInt(1, 5000);
   crs.setString(2, "West");

Теперь поле params содержит два элемента, каждый из которых представляет собой массив из двух элементов. Первый элемент — номер параметра, второй — задаваемое значение. В данном случае первый элемент params — это 1, 5000, а второй — 2, "West". Когда приложение вызывает метод execute, тот, в свою очередь, вызывает средство чтения этого объекта RowSet, которое затем вызывает свой метод readData. В рамках своей реализации readData получает значения из params и использует их для задания параметров-заполнителей команды. В следующем фрагменте кода показано, как средство чтения выполняет эту операцию после получения объекта Connection con.

   PreparedStatement pstmt = con.prepareStatement(crs.getCommand());
   reader.decodeParams();
   // decodeParams figures out which setter methods to use and does something
   // like the following:
   //    for (i = 0; i < params.length; i++) {
   //        pstmt.setObject(i + 1, params[i]);
   //    }

На этом этапе команда для crs представляет собой запрос "SELECT FIRST_NAME, LAST_NAME, ADDRESS FROM CUSTOMERS WHERE CREDIT_LIMIT > 5000 AND REGION = "West". После того как метод readData выполнит эту команду следующей строкой кода, он получит данные из rs, которыми заполнит crs.

    ResultSet rs = pstmt.executeQuery();

Предыдущие фрагменты кода дают представление о том, что происходит за кулисами; в приложении они не встречаются, поскольку приложение не вызывает такие методы, как readData и decodeParams. Напротив, в следующем фрагменте кода показано, что может делать приложение. Оно задаёт команду набора строк, задаёт параметры команды и выполняет её. Просто вызвав метод execute, объект crs заполняет себя запрошенными данными из таблицы CUSTOMERS.

   crs.setCommand("SELECT FIRST_NAME, LAST_NAME, ADDRESS FROM CUSTOMERS" +
                  "WHERE CREDIT_LIMIT > ? AND REGION = ?");
   crs.setInt(1, 5000);
   crs.setString(2, "West");
   crs.execute();

10.0 Постраничная выборка данных

Поскольку объект CachedRowSet хранит данные в памяти, объём данных, который он может одновременно содержать, определяется доступным объёмом памяти. Чтобы обойти это ограничение, объект CachedRowSet может получать данные из объекта ResultSet порциями, называемыми страницами. Чтобы воспользоваться этим механизмом, приложение задаёт количество строк на странице с помощью метода setPageSize. Иными словами, если размер страницы равен пяти, за один раз из источника данных будет извлекаться порция из пяти строк. Приложение также может дополнительно задать максимальное количество строк, извлекаемых за один раз. Если максимальное количество строк равно нулю или не задано, количество строк, извлекаемых за один раз, не ограничено.

После задания свойств объект CachedRowSet необходимо заполнить данными с помощью метода populate или execute. В следующих строках кода показано использование метода populate. Обратите внимание: эта версия метода принимает два параметра — дескриптор ResultSet и номер строки объекта ResultSet, с которой следует начать извлечение строк.

    CachedRowSet crs = new CachedRowSetImpl();
    crs.setMaxRows(20);
    crs.setPageSize(4);
    crs.populate(rsHandle, 10);
После выполнения этого кода объект crs будет заполнен четырьмя строками из rsHandle, начиная с десятой строки.

В следующем фрагменте кода показано заполнение объекта CachedRowSet с помощью метода execute, который может принимать или не принимать объект Connection в качестве параметра. В этом примере методу execute передаётся объект Connection conHandle.

Обратите внимание на два отличия следующего фрагмента кода от предыдущего. Во-первых, метод setMaxRows не вызывается, поэтому максимальное количество строк для crs не задаётся. (Помните, что crs всё равно ограничен объёмом данных, который может хранить в памяти.) Во-вторых, методу execute нельзя передать номер строки объекта ResultSet, с которой следует начать извлечение строк. Этот метод всегда начинает с первой строки.

    CachedRowSet crs = new CachedRowSetImpl();
    crs.setPageSize(5);
    crs.execute(conHandle);
После выполнения этого кода объект crs будет содержать пять строк данных из объекта ResultSet, полученного в результате выполнения команды для crs. Средство записи объекта crs использует conHandle для подключения к источнику данных и выполнения команды для crs. Затем приложение может работать с данными в crs так же, как с данными любого другого объекта CachedRowSet.

Чтобы получить следующую страницу (порцию данных), приложение вызывает метод nextPage. Этот метод создаёт новый объект CachedRowSet и заполняет его следующей страницей данных. Например, предположим, что команда объекта CachedRowSet возвращает объект ResultSet rs с 1000 строками данных. Если размер страницы задан равным 100, первый вызов метода nextPage создаст объект CachedRowSet, содержащий первые 100 строк из rs. После того как приложение выполнит необходимые операции с данными этих первых 100 строк, оно может снова вызвать метод nextPage, чтобы создать другой объект CachedRowSet со следующими 100 строками из rs. Данные первого объекта CachedRowSet больше не будут храниться в памяти, поскольку их заменят данные второго объекта CachedRowSet. После десятого вызова метода nextPage десятый объект CachedRowSet будет содержать последние 100 строк данных из rs, хранящиеся в памяти. В каждый момент времени в памяти хранятся данные только одного объекта CachedRowSet.

Метод nextPage возвращает true, пока текущая страница не является последней, и false, когда страниц больше нет. Поэтому его можно использовать в цикле while для получения всех страниц, как показано в следующих строках кода.

    CachedRowSet crs = CachedRowSetImpl();
    crs.setPageSize(100);
    crs.execute(conHandle);

    while(crs.nextPage()) {
        while(crs.next()) {
            . . . // operate on chunks (of 100 rows each) in crs,
                  // row by row
        }
    }
После выполнения этого фрагмента кода приложение просмотрит все 1000 строк, но одновременно в памяти будет находиться не более 100 строк.

Интерфейс CachedRowSet также определяет метод previousPage. Подобно тому как метод nextPage аналогичен методу ResultSet интерфейса next, метод previousPage аналогичен методу ResultSet интерфейса previous. Как и метод nextPage, метод previousPage создаёт объект CachedRowSet, содержащий количество строк, равное заданному размеру страницы. Например, метод previousPage можно использовать в цикле while в конце предыдущего фрагмента кода, чтобы перемещаться по страницам от последней к первой. Метод previousPage также похож на nextPage тем, что его можно использовать в цикле while, однако он возвращает true, пока перед текущей страницей есть ещё одна, и false, когда впереди больше нет страниц.

Если установить курсор после последней строки каждой страницы, как показано в следующем фрагменте кода, метод previous будет перемещать курсор от последней строки к первой на каждой странице. Можно также установить курсор перед первой строкой каждой страницы, а затем использовать метод next в цикле while, чтобы перемещаться по каждой странице от первой строки к последней.

Следующий фрагмент кода предполагает продолжение предыдущего: курсор десятого объекта CachedRowSet находится на последней строке. Код перемещает курсор за последнюю строку, чтобы первый вызов метода previous вернул его на последнюю строку. Пройдя все строки последней страницы (объекта CachedRowSet crs), код входит в цикл while, чтобы перейти к девятой странице, пройти строки в обратном порядке, перейти к восьмой странице, снова пройти строки в обратном порядке и так далее, до первой строки первой страницы.

    crs.afterLast();
    while(crs.previous())  {
        . . . // navigate through the rows, last to first
    {
    while(crs.previousPage())  {
        crs.afterLast();
        while(crs.previous())  {
            . . . // go from the last row to the first row of each page
        }
    }
С момента выпуска:
1.5

Краткое описание полей

Модификатор и тип Поле Описание
static final boolean COMMIT_ON_ACCEPT_CHANGES
Устарело.
Поскольку это поле является final (оно входит в интерфейс), его значение нельзя изменить.

Поля, объявленные в интерфейсе 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

Краткое описание методов

Модификатор и тип Метод Описание
void acceptChanges()
Передает источнику данных изменения строк, внесенные в этот объект CachedRowSet: обновление, вставку и удаление.
void acceptChanges(Connection con)
Передает все изменения строк — обновление, вставку и удаление — источнику данных, лежащему в основе этого объекта CachedRowSet, используя указанный объект Connection для установления соединения с источником данных.
boolean columnUpdated(int idx)
Указывает, было ли обновлено указанное значение столбца в текущей строке этого объекта CachedRowSet.
boolean columnUpdated(String columnName)
Указывает, было ли обновлено указанное значение столбца в текущей строке этого объекта CachedRowSet.
void commit()
Объект CachedRowSet содержит в своем SyncProvider объект Connection из ResultSet или свойства JDBC, переданные его конструкторам.
CachedRowSet createCopy()
Создает объект RowSet, являющийся полной копией данных этого объекта CachedRowSet.
CachedRowSet createCopyNoConstraints()
Создает объект CachedRowSet, содержащий полную копию данных этого объекта CachedRowSet, но независимый от него.
CachedRowSet createCopySchema()
Создает пустую копию этого объекта CachedRowSet типа CachedRowSet.
RowSet createShared()
Возвращает новый объект RowSet, использующий те же данные, что и этот объект CachedRowSet.
void execute(Connection conn)
Заполняет этот объект CachedRowSet данными, используя заданное соединение для получения результирующего набора, из которого будут прочитаны данные.
int[] getKeyColumns()
Возвращает массив, содержащий один или несколько номеров столбцов, образующих ключ, который однозначно идентифицирует строку в этом объекте CachedRowSet.
ResultSet getOriginal()
Возвращает объект ResultSet, содержащий исходное значение этого объекта CachedRowSet.
ResultSet getOriginalRow()
Возвращает объект ResultSet, содержащий исходное значение только для текущей строки этого объекта CachedRowSet.
int getPageSize()
Возвращает размер страницы объекта CachedRowSet
RowSetWarning getRowSetWarnings()
Извлекает первое предупреждение, сообщенное при вызовах этого объекта RowSet.
boolean getShowDeleted()
Извлекает значение boolean, указывающее, отображаются ли строки, помеченные для удаления, в наборе текущих строк.
SyncProvider getSyncProvider()
Извлекает реализацию SyncProvider для этого объекта CachedRowSet.
String getTableName()
Возвращает идентификатор объекта (таблицы), использованного для создания этого объекта CachedRowSet.
boolean nextPage()
Переходит к следующей странице объекта CachedRowSet.
void populate(ResultSet data)
Заполняет этот объект CachedRowSet данными из заданного объекта ResultSet.
void populate(ResultSet rs, int startRow)
Заполняет этот объект CachedRowSet данными из заданного объекта ResultSet.
boolean previousPage()
Переходит к предыдущей странице объекта CachedRowSet.
void release()
Освобождает текущее содержимое этого объекта CachedRowSet и отправляет событие rowSetChanged всем зарегистрированным слушателям.
void restoreOriginal()
Восстанавливает исходное значение этого объекта CachedRowSet, то есть значение до последнего набора изменений.
void rollback()
Объект CachedRowSet содержит в своем SyncProvider объект Connection из исходного ResultSet или свойства JDBC, переданные ему.
void rollback(Savepoint s)
Объект CachedRowSet содержит в своем SyncProvider объект Connection из исходного ResultSet или свойства JDBC, переданные ему.
void rowSetPopulated(RowSetEvent event, int numRows)
Уведомляет зарегистрированных слушателей о том, что объект RowSet в заданном объекте RowSetEvent заполнил несколько дополнительных строк.
void setKeyColumns(int[] keys)
Задает для поля keyCols этого объекта CachedRowSet указанный массив номеров столбцов, образующих ключ для однозначной идентификации строки в этом объекте CachedRowSet.
void setMetaData(RowSetMetaData md)
Задает метаданные этого объекта CachedRowSet с помощью указанного объекта RowSetMetaData.
void setOriginalRow()
Устанавливает текущую строку этого объекта CachedRowSet как исходную строку.
void setPageSize(int size)
Задает размер страницы объекта CachedRowSet.
void setShowDeleted(boolean b)
Задает свойству showDeleted указанное значение boolean, определяющее, отображаются ли строки, помеченные для удаления, в наборе текущих строк.
void setSyncProvider(String provider)
Задает для объекта SyncProvider этого объекта CachedRowSet указанное значение.
void setTableName(String tabName)
Задает указанные имя таблицы как идентификатор таблицы, из которой был получен этот объект CachedRowSet.
int size()
Возвращает количество строк в этом объекте CachedRowSet.
Collection<?> toCollection()
Преобразует этот объект CachedRowSet в объект Collection, содержащий все данные этого объекта CachedRowSet.
Collection<?> toCollection(int column)
Преобразует указанный столбец этого объекта CachedRowSet в объект Collection.
Collection<?> toCollection(String column)
Преобразует указанный столбец этого объекта CachedRowSet в объект Collection.
void undoDelete()
Отменяет удаление текущей строки и уведомляет слушателей об изменении строки.
void undoInsert()
Немедленно удаляет текущую строку из этого объекта CachedRowSet, если она была вставлена, а также уведомляет слушателей об изменении строки.
void undoUpdate()
Немедленно отменяет последнюю операцию обновления, если строка была изменена.

Методы, объявленные в интерфейсе Joinable

getMatchColumnIndexes, getMatchColumnNames, setMatchColumn, setMatchColumn, setMatchColumn, setMatchColumn, unsetMatchColumn, unsetMatchColumn, unsetMatchColumn, unsetMatchColumn

Методы, объявленные в интерфейсе 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, 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

Методы, объявленные в интерфейсе 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

Методы, объявленные в интерфейсе Wrapper

isWrapperFor, unwrap

Подробное описание полей

COMMIT_ON_ACCEPT_CHANGES

@Deprecated static final boolean COMMIT_ON_ACCEPT_CHANGES
Устарело.
Поскольку это поле является final (оно входит в интерфейс), его значение нельзя изменить.
Заставляет объект CachedRowSet фиксировать изменения при вызове acceptChanges() его SyncProvider. Если задано значение false, изменения не будут зафиксированы, пока не будет вызван один из транзакционных методов интерфейса CachedRowSet.
См. также:
  • commit()
  • rollback()
  • Значения константных полей

Подробное описание методов

populate

void populate(ResultSet data) throws SQLException
Заполняет этот объект CachedRowSet данными из указанного объекта ResultSet.

Этот метод можно использовать вместо метода execute, если приложение имеет подключение к открытому объекту ResultSet. Использование метода populate может быть эффективнее, чем использование версии метода execute без параметров, поскольку он не открывает новое подключение и не выполняет повторно команду объекта CachedRowSet. Использование метода populate удобнее, чем использование версии execute, принимающей объект ResultSet.

Параметры:
data — объект ResultSet, содержащий данные для чтения в этот объект CachedRowSet
Исключения:
SQLException — если передан нулевой объект ResultSet или этот объект CachedRowSet не может получить связанный объект ResultSetMetaData
См. также:
  • execute(Connection)
  • ResultSet
  • ResultSetMetaData

execute

void execute(Connection conn) throws SQLException
Заполняет этот объект CachedRowSet данными, используя указанное подключение для получения результирующего набора, из которого будут считываться данные. Этот метод должен закрывать все создаваемые им подключения к базе данных, чтобы гарантировать, что этот объект CachedRowSet отключен, кроме случаев чтения данных из источника данных или записи данных в него.

Для установки подключения к источнику данных средство чтения этого объекта CachedRowSet использует conn, чтобы выполнить команду набора строк и считать данные из результирующего объекта ResultSet в этот объект CachedRowSet. Этот метод также закрывает conn после заполнения объекта CachedRowSet.

Если этот метод вызывается для уже заполненной реализации, содержимое и метаданные сбрасываются. Кроме того, если этот метод вызван до вызова метода acceptChanges для фиксации ожидающих обновлений, эти обновления теряются.

Параметры:
conn — стандартный объект JDBC Connection с допустимыми свойствами
Исключения:
SQLException — если передан недопустимый объект Connection или при установлении подключения к источнику данных произошла ошибка
См. также:
  • populate(ResultSet)
  • Connection

acceptChanges

void acceptChanges() throws SyncProviderException
Передает источнику данных изменения строк, включая обновления, вставки и удаления, внесенные в этот объект CachedRowSet.

Для выполнения этой работы в фоновом режиме данный метод вызывает средство записи объекта CachedRowSet. Стандартные реализации CachedRowSet должны использовать синглтон SyncFactory для получения экземпляра SyncProvider, предоставляющего объект RowSetWriter (средство записи). Средство записи попытается передать источнику данных изменения, внесенные в этот объект CachedRowSet.

При успешном выполнении метода acceptChanges, помимо записи изменений в источник данных, значения текущей строки становятся значениями исходной строки.

В зависимости от уровня синхронизации используемой реализации SyncProvider средство записи сравнит исходные значения со значениями в источнике данных, чтобы проверить наличие конфликтов. Например, при обнаружении конфликта реализация RIOptimisticProvider выбрасывает SyncProviderException и ничего не записывает в источник данных.

Приложение может перехватить объект SyncProviderException и получить содержащийся в нем объект SyncResolver. Объект SyncResolver перечисляет конфликты для каждой строки и блокирует источник данных, чтобы предотвратить новые конфликты во время разрешения текущих. Кроме того, для каждого конфликта он предоставляет методы для анализа конфликта и установки значения, которое должно быть сохранено в источнике данных. После разрешения всех конфликтов приложение должно снова вызвать метод acceptChanges, чтобы записать разрешенные значения в источник данных. Если все значения в источнике данных уже являются значениями, подлежащими сохранению, метод acceptChanges ничего не делает.

Некоторые реализации поставщиков могут использовать блокировки, чтобы гарантировать отсутствие конфликтов. В таких случаях гарантируется, что средство записи успешно передаст изменения источнику данных при вызове метода acceptChanges. Этот метод можно вызвать сразу после вызова методов updateRow, insertRow или deleteRow, однако эффективнее вызвать его один раз после внесения всех изменений, чтобы установить только одно подключение.

Примечание. Метод acceptChanges() определяет, имеет ли COMMIT_ON_ACCEPT_CHANGES значение true. Если это так, все обновления при синхронизации фиксируются в источнике данных. В противном случае приложение должно явно вызвать соответствующий метод commit() или rollback().

Исключения:
SyncProviderException — если средство записи базового поставщика синхронизации не может записать обновления обратно в источник данных
См. также:
  • acceptChanges(java.sql.Connection)
  • RowSetWriter
  • SyncFactory
  • SyncProvider
  • SyncProviderException
  • SyncResolver

acceptChanges

void acceptChanges(Connection con) throws SyncProviderException
Передает все изменения строк, включая обновления, вставки и удаления, в источник данных, на котором основан этот объект CachedRowSet, используя указанный объект Connection для установки подключения к источнику данных.

В другую версию метода acceptChanges подключение не передается, поскольку она использует объект Connection, уже определенный в объекте RowSet и использованный для его первоначального заполнения.

Эта форма метода acceptChanges похожа на форму без аргументов; однако, в отличие от другой формы, ее можно использовать только в том случае, если базовый источник данных является источником данных JDBC. Обновленные свойства Connection должны использоваться методом SyncProvider для сброса конфигурации RowSetWriter, чтобы обеспечить корректную синхронизацию содержимого объекта CachedRowSet.

При успешном выполнении метода acceptChanges, помимо записи изменений в источник данных, значения текущей строки становятся значениями исходной строки.

В зависимости от уровня синхронизации используемой реализации SyncProvider средство записи сравнит исходные значения со значениями в источнике данных, чтобы проверить наличие конфликтов. Например, при обнаружении конфликта реализация RIOptimisticProvider выбрасывает SyncProviderException и ничего не записывает в источник данных.

Приложение может перехватить объект SyncProviderException и получить содержащийся в нем объект SyncResolver. Объект SyncResolver перечисляет конфликты для каждой строки и блокирует источник данных, чтобы предотвратить новые конфликты во время разрешения текущих. Кроме того, для каждого конфликта он предоставляет методы для анализа конфликта и установки значения, которое должно быть сохранено в источнике данных. После разрешения всех конфликтов приложение должно снова вызвать метод acceptChanges, чтобы записать разрешенные значения в источник данных. Если все значения в источнике данных уже являются значениями, подлежащими сохранению, метод acceptChanges ничего не делает.

Некоторые реализации поставщиков могут использовать блокировки, чтобы гарантировать отсутствие конфликтов. В таких случаях гарантируется, что средство записи успешно передаст изменения источнику данных при вызове метода acceptChanges. Этот метод можно вызвать сразу после вызова методов updateRow, insertRow или deleteRow, однако эффективнее вызвать его один раз после внесения всех изменений, чтобы установить только одно подключение.

Примечание. Метод acceptChanges() определяет, имеет ли COMMIT_ON_ACCEPT_CHANGES значение true. Если это так, все обновления при синхронизации фиксируются в источнике данных. В противном случае приложение должно явно вызвать соответствующий метод commit или rollback.

Параметры:
con — стандартный объект JDBC Connection
Исключения:
SyncProviderException — если средство записи базового поставщика синхронизации не может записать обновления обратно в источник данных
См. также:
  • acceptChanges()
  • RowSetWriter
  • SyncFactory
  • SyncProvider
  • SyncProviderException
  • SyncResolver

restoreOriginal

void restoreOriginal() throws SQLException
Восстанавливает исходное значение этого объекта CachedRowSet, то есть значение до последнего набора изменений. Если в набор строк не вносились изменения или был внесен только один набор изменений, исходным значением является значение, которым был заполнен этот объект CachedRowSet; в противном случае исходное значение — это значение непосредственно перед текущим.

При вызове этого метода реализация CachedRowSet должна обеспечить замену всех обновлений, вставок и удалений текущего экземпляра набора строк предыдущими значениями. Кроме того, курсор следует переместить к первой строке и сгенерировать событие rowSetChanged, чтобы уведомить всех зарегистрированных слушателей.

Исключения:
SQLException — если при откате текущего значения этого объекта CachedRowSet к предыдущему значению произошла ошибка
См. также:
  • RowSetListener.rowSetChanged(RowSetEvent)

release

void release() throws SQLException
Освобождает текущее содержимое этого объекта CachedRowSet и отправляет событие rowSetChanged всем зарегистрированным слушателям. Все ожидающие обновления отбрасываются, и после вызова этого метода набор строк не содержит строк. Взаимодействие с базовым источником данных не выполняется, а любые данные набора строк, метаданные и обновления содержимого должны быть невосстановимы.

Этот объект CachedRowSet должен оставаться заблокированным до полной очистки его содержимого и связанных обновлений, предотвращая тем самым «грязное» чтение другими компонентами, имеющими ссылку на этот объект RowSet. Кроме того, содержимое нельзя освобождать, пока все компоненты, читающие этот объект CachedRowSet, не завершат чтение. После отправки события rowSetChanged этот объект CachedRowSet должен вернуться к нормальному режиму работы.

Метаданные, включая свойства JDBC и свойства Synchronization SPI, сохраняются для дальнейшего использования. Важно, чтобы такие свойства, как свойство command, соответствовали исходному источнику данных, из которого первоначально был создан этот объект CachedRowSet.

Этот метод очищает набор строк, в отличие от метода close, который помечает весь набор строк как подлежащий восстановлению, чтобы сборщик мусора мог освободить ресурсы набора строк в виртуальной машине Java.

Исключения:
SQLException — если при очистке содержимого этого объекта CachedRowSet произошла ошибка
См. также:
  • RowSetListener.rowSetChanged(RowSetEvent)
  • ResultSet.close()

undoDelete

void undoDelete() throws SQLException
Отменяет удаление текущей строки и уведомляет слушателей об изменении строки. После вызова этого метода текущая строка больше не помечена для удаления. Этот метод можно вызывать в любое время существования набора строк.

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

  • CachedRowSet.absolute
  • CachedRowSet.first
  • CachedRowSet.last
Исключения:
SQLException — если (1) текущая строка не была удалена или (2) курсор находится на строке вставки, перед первой строкой или после последней строки
См. также:
  • undoInsert()
  • ResultSet.cancelRowUpdates()

undoInsert

void undoInsert() throws SQLException
Немедленно удаляет текущую строку из этого объекта CachedRowSet, если она была вставлена, и уведомляет слушателей об изменении строки. Этот метод можно вызывать в любое время существования набора строк; если текущая строка не подпадает под ограничения для исключений (см. ниже), он отменяет вставку текущей строки.

Кроме того, можно отменить несколько вставок строк, изменяя положение курсора с помощью любого метода управления положением курсора, например:

  • CachedRowSet.absolute
  • CachedRowSet.first
  • CachedRowSet.last
Исключения:
SQLException — если (1) текущая строка не была вставлена или (2) курсор находится перед первой строкой, после последней строки или на строке вставки
См. также:
  • undoDelete()
  • ResultSet.cancelRowUpdates()

undoUpdate

void undoUpdate() throws SQLException
Немедленно отменяет последнюю операцию обновления, если строка была изменена. Этот метод можно вызывать для отмены обновлений во всех столбцах, пока все обновления строки не будут возвращены к состоянию, в котором они находились непосредственно перед последней синхронизацией (acceptChanges) или заполнением. Этот метод также можно вызывать при обновлении строки вставки.

Метод undoUpdate можно вызывать в любое время существования набора строк; однако после синхронизации он не действует до тех пор, пока данные набора строк не будут изменены.

Исключения:
SQLException — если курсор находится перед первой или после последней строки этого объекта CachedRowSet
См. также:
  • undoDelete()
  • undoInsert()
  • ResultSet.cancelRowUpdates()

columnUpdated

boolean columnUpdated(int idx) throws SQLException
Указывает, был ли обновлен заданный столбец в текущей строке этого объекта CachedRowSet.
Параметры:
idx — значение int, определяющее столбец, для которого проверяется наличие обновлений
Возвращает:
true, если заданный столбец был явно обновлен; в противном случае — false
Исключения:
SQLException — если курсор находится на строке вставки, перед первой строкой или после последней строки
См. также:
  • DatabaseMetaData.updatesAreDetected(int)

columnUpdated

boolean columnUpdated(String columnName) throws SQLException
Указывает, был ли обновлен заданный столбец в текущей строке этого объекта CachedRowSet.
Параметры:
columnName — объект String, задающий имя столбца, для которого проверяется наличие обновлений
Возвращает:
true, если столбец был явно обновлен; в противном случае — false
Исключения:
SQLException — если курсор находится на строке вставки, перед первой строкой или после последней строки
См. также:
  • DatabaseMetaData.updatesAreDetected(int)

toCollection

Collection<?> toCollection() throws SQLException
Преобразует этот объект CachedRowSet в объект Collection, содержащий все данные этого объекта CachedRowSet. Из-за абстрактной природы платформы Collection реализации могут по-разному представлять этот объект Collection. Каждая строка должна быть полностью представлена либо в универсальной реализации Collection, либо в специализированной реализации Collection, например в объекте TreeMap или Vector. Значение столбца SQL-типа NULL должно представляться в языке программирования Java как null.

Стандартная эталонная реализация интерфейса CachedRowSet использует объект TreeMap для набора строк, а значения каждой строки хранятся в объектах Vector. Предполагается, что большинство реализаций поступит так же.

Тип коллекции TreeMap гарантирует, что карта будет упорядочена по ключам по возрастанию согласно естественному порядку класса ключа. Каждый ключ ссылается на объект Vector, соответствующий одной строке объекта RowSet. Поэтому размер каждого объекта Vector должен точно совпадать с количеством столбцов в объекте RowSet. Ключ, используемый коллекцией TreeMap, определяется реализацией, которая может использовать уже заданный ключ, доступный во внутренней табличной структуре RowSet благодаря тому, что ключ уже задан либо в самом объекте RowSet, либо в базовых данных SQL.

Возвращает:
объект Collection, содержащий значения каждой строки этого объекта CachedRowSet
Исключения:
SQLException — если при создании коллекции произошла ошибка
См. также:
  • toCollection(int)
  • toCollection(String)

toCollection

Collection<?> toCollection(int column) throws SQLException
Преобразует указанный столбец этого объекта CachedRowSet в объект Collection. Из-за абстрактной природы платформы Collection реализации могут по-разному представлять этот объект Collection. Каждое значение столбца должно быть полностью представлено либо в универсальной реализации Collection, либо в специализированной реализации Collection, например в объекте Vector. Значение столбца SQL-типа NULL должно представляться в языке программирования Java как null.

Стандартная эталонная реализация использует объект Vector для хранения значений столбца; предполагается, что большинство реализаций поступит так же. Если используется объект Vector, его размер должен точно совпадать с количеством строк в этом объекте CachedRowSet.

Параметры:
column — значение int, указывающее столбец, значения которого должны быть представлены в объекте Collection
Возвращает:
объект Collection, содержащий значения указанного столбца этого объекта CachedRowSet
Исключения:
SQLException — если при создании коллекции произошла ошибка или указан недопустимый идентификатор столбца
См. также:
  • toCollection()
  • toCollection(String)

toCollection

Collection<?> toCollection(String column) throws SQLException
Преобразует указанный столбец этого объекта CachedRowSet в объект Collection. Из-за абстрактной природы платформы Collection реализации могут по-разному представлять этот объект Collection. Каждое значение столбца должно быть полностью представлено либо в универсальной реализации Collection, либо в специализированной реализации Collection, например в объекте Vector. Значение столбца SQL-типа NULL должно представляться в языке программирования Java как null.

Стандартная эталонная реализация использует объект Vector для хранения значений столбца; предполагается, что большинство реализаций поступит так же. Если используется объект Vector, его размер должен точно совпадать с количеством строк в этом объекте CachedRowSet.

Параметры:
column — объект String, задающий имя столбца, значения которого должны быть представлены в коллекции
Возвращает:
объект Collection, содержащий значения указанного столбца этого объекта CachedRowSet
Исключения:
SQLException — если при создании коллекции произошла ошибка или указан недопустимый идентификатор столбца
См. также:
  • toCollection()
  • toCollection(int)

getSyncProvider

SyncProvider getSyncProvider() throws SQLException
Получает реализацию SyncProvider для этого объекта CachedRowSet. Внутри этот метод используется набором строк для запуска операций чтения или записи между набором строк и источником данных. Например, набору строк может потребоваться получить средство чтения набора строк (объект RowSetReader) из SyncProvider, чтобы заполнить набор строк.
     RowSetReader rowsetReader = null;
     SyncProvider provider =
         SyncFactory.getInstance("javax.sql.rowset.provider.RIOptimisticProvider");
         if (provider instanceof RIOptimisticProvider) {
             rowsetReader = provider.getRowSetReader();
         }
 
Если предположить, что rowsetReader — это закрытое доступное поле реализации набора строк, при вызове приложением метода execute он, в свою очередь, вызывает метод readData средства чтения для заполнения объекта RowSet.
     rowsetReader.readData((RowSetInternal)this);
 

Кроме того, приложение может использовать объект SyncProvider, возвращенный этим методом, для вызова методов, предоставляющих сведения об объекте SyncProvider, включая информацию о поставщике, версии, идентификаторе поставщика, уровне синхронизации и установленных в данный момент блокировках.

Возвращает:
объект SyncProvider, заданный при создании экземпляра набора строк, или поставщика по умолчанию, если он не был задан
Исключения:
SQLException — если при возврате объекта SyncProvider произошла ошибка
См. также:
  • setSyncProvider(String)

setSyncProvider

void setSyncProvider(String provider) throws SQLException
Задает для объекта CachedRowSet поставщика SyncProvider, указанного в качестве аргумента. Этот метод позволяет сбросить объект SyncProvider.

Реализация CachedRowSet всегда должна создаваться с доступным механизмом SyncProvider, однако существуют случаи, когда сброс объекта SyncProvider желателен или необходим. Например, приложение может некоторое время использовать поставщика SyncProvider по умолчанию, а затем выбрать поставщика, который стал доступен позднее и лучше соответствует его потребностям.

Сброс объекта SyncProvider заставляет объект RowSet запросить новую реализацию SyncProvider у SyncFactory. В результате сбрасываются все предыдущие подключения и связи с исходным источником данных, что может существенно изменить поведение синхронизации отключенного набора строк.

Параметры:
provider — объект String, задающий полное имя класса реализации SyncProvider
Исключения:
SQLException — если при попытке сбросить реализацию SyncProvider произошла ошибка
См. также:
  • getSyncProvider()

size

int size()
Возвращает количество строк в этом объекте CachedRowSet.
Возвращает:
количество строк в наборе строк

setMetaData

void setMetaData(RowSetMetaData md) throws SQLException
Устанавливает метаданные этого объекта CachedRowSet с помощью заданного объекта RowSetMetaData. Когда объект RowSetReader считывает содержимое набора строк, он создает объект RowSetMetaData и инициализирует его с помощью методов реализации RowSetMetaData. В эталонной реализации используется класс RowSetMetaDataImpl. После завершения чтения содержимого набора строк этим методом внутри класса передается объект RowSetMetaData набору строк.
Параметры:
md — объект RowSetMetaData, содержащий метаданные о столбцах этого объекта CachedRowSet
Исключения:
SQLException — если набору строк предоставлены недопустимые метаданные

getOriginal

ResultSet getOriginal() throws SQLException
Возвращает объект ResultSet, содержащий исходное значение этого объекта CachedRowSet.

Курсор объекта ResultSet должен быть установлен перед первой строкой. Кроме того, возвращаемый объект ResultSet должен иметь следующие свойства:

  • ResultSet.TYPE_SCROLL_INSENSITIVE
  • ResultSet.CONCUR_UPDATABLE

Исходное значение объекта RowSet — это значение, которое он имел до последней синхронизации с базовым источником данных. Если синхронизация не выполнялась, исходным значением будет значение, которым был заполнен объект RowSet. Этот метод вызывается внутри класса, когда приложение вызывает метод acceptChanges, а объект SyncProvider реализован с проверкой конфликтов. В этом случае средство записи сравнивает исходное значение со значением, находящимся в данный момент в источнике данных, чтобы проверить наличие конфликтов.

Возвращает:
объект ResultSet, содержащий исходное значение этого объекта CachedRowSet
Исключения:
SQLException — если при создании объекта ResultSet возникает ошибка

getOriginalRow

ResultSet getOriginalRow() throws SQLException
Возвращает объект ResultSet, содержащий исходное значение только текущей строки этого объекта CachedRowSet.

Курсор объекта ResultSet должен быть установлен перед первой строкой. Кроме того, возвращаемый объект ResultSet должен иметь следующие свойства:

  • ResultSet.TYPE_SCROLL_INSENSITIVE
  • ResultSet.CONCUR_UPDATABLE
Возвращает:
исходный набор результатов строки
Исключения:
SQLException — если текущая строка отсутствует
См. также:
  • setOriginalRow()

setOriginalRow

void setOriginalRow() throws SQLException
Устанавливает текущую строку этого объекта CachedRowSet в качестве исходной строки.

Этот метод вызывается внутри класса после синхронизации всех измененных значений текущей строки с источником данных. Текущая строка должна быть помечена как более не вставленная, удаленная или обновленная.

Вызов setOriginalRow необратим.

Исключения:
SQLException — если текущая строка отсутствует или при сбросе содержимого исходной строки возникает ошибка
См. также:
  • getOriginalRow()

getTableName

String getTableName() throws SQLException
Возвращает идентификатор объекта (таблицы), использованного для создания этого объекта CachedRowSet. Это имя может задаваться несколько раз; спецификация не устанавливает ограничений на количество таких операций и не определяет, должны ли стандартные реализации отслеживать предыдущие имена таблиц.
Возвращает:
объект String с именем таблицы, являющейся источником данных для этого объекта CachedRowSet, или null, если имя таблицы не задано
Исключения:
SQLException — если при возврате имени таблицы возникает ошибка
См. также:
  • ResultSetMetaData.getTableName(int)

setTableName

void setTableName(String tabName) throws SQLException
Задает идентификатор таблицы, из которой был получен этот объект CachedRowSet, используя указанное имя таблицы. Средство записи использует это имя, чтобы определить, какую таблицу использовать при сравнении значений в источнике данных со значениями объекта CachedRowSet во время попытки синхронизации. Идентификатор таблицы также указывает, куда следует записывать измененные значения этого объекта CachedRowSet.

Реализация этого объекта CachedRowSet может получить имя внутри класса из объекта RowSetMetaDataImpl.

Параметры:
tabName — объект String, идентифицирующий таблицу, из которой был получен этот объект CachedRowSet; не может быть null, но может быть пустой строкой
Исключения:
SQLException — если при задании имени таблицы возникает ошибка или если tabName имеет значение null
См. также:
  • RowSetMetaData.setTableName(int, String)
  • RowSetWriter
  • SyncProvider

getKeyColumns

int[] getKeyColumns() throws SQLException
Возвращает массив, содержащий номера одного или нескольких столбцов, которые образуют ключ, однозначно идентифицирующий строку в этом объекте CachedRowSet.
Возвращает:
массив, содержащий номер или номера столбцов, указывающих, какие столбцы образуют первичный ключ строки в этом объекте CachedRowSet. Если ни один столбец не является частью первичного ключа, массив должен быть пустым.
Исключения:
SQLException — если этот объект CachedRowSet пуст
См. также:
  • setKeyColumns(int[])
  • Joinable.getMatchColumnIndexes()
  • Joinable.getMatchColumnNames()

setKeyColumns

void setKeyColumns(int[] keys) throws SQLException
Задает поле keyCols объекта CachedRowSet, используя указанный массив номеров столбцов, образующих ключ для однозначной идентификации строки в этом объекте CachedRowSet.

Если объект CachedRowSet становится частью объекта JoinRowSet, ключи, заданные этим методом, и связанные с ними ограничения сохраняются, если столбцы, назначенные ключевыми, также становятся столбцами сопоставления.

Параметры:
keys — массив значений int, указывающих столбцы, образующие первичный ключ этого объекта CachedRowSet; каждый элемент массива должен быть больше 0 и меньше или равен числу столбцов в этом наборе строк
Исключения:
SQLException — если какие-либо числа в указанном массиве недопустимы для этого набора строк
См. также:
  • getKeyColumns()
  • Joinable.setMatchColumn(String)
  • Joinable.setMatchColumn(int)

createShared

RowSet createShared() throws SQLException
Возвращает новый объект RowSet, использующий те же данные, что и этот объект CachedRowSet. Фактически оба объекта CachedRowSet имеют курсоры над одними и теми же данными. Поэтому любые изменения, внесенные дубликатом, видны исходному объекту и всем остальным дубликатам, так же как изменения, внесенные исходным объектом, видны всем его дубликатам. Если дубликат вызывает метод, изменяющий базовые данные, этот метод уведомляет всех зарегистрированных слушателей так же, как при вызове исходным объектом CachedRowSet.

Кроме того, любой объект RowSet, созданный этим методом, будет иметь те же свойства, что и этот объект CachedRowSet. Например, если этот объект CachedRowSet доступен только для чтения, все его дубликаты также будут доступны только для чтения. Если для него разрешено обновление, дубликаты также станут доступными для обновления.

ПРИМЕЧАНИЕ. Если несколько потоков обращаются к объектам RowSet, созданным методом createShared(), для обеспечения целостности общих данных необходимо соблюдать следующее поведение: чтение и запись всех общих объектов RowSet должны выполняться последовательно между каждым объектом и единой базовой табличной структурой.

Возвращает:
новый общий объект RowSet с теми же свойствами, что и этот объект CachedRowSet, и курсором над теми же данными
Исключения:
SQLException — если произошла ошибка или клонирование не поддерживается базовой платформой
См. также:
  • RowSetEvent
  • RowSetListener

createCopy

CachedRowSet createCopy() throws SQLException
Создает объект RowSet, являющийся глубокой копией данных этого объекта CachedRowSet. В отличие от объекта RowSet, созданного вызовом createShared, обновления, внесенные в копию исходного объекта RowSet, не должны быть видны исходному объекту RowSet. Кроме того, область действия любых слушателей событий, зарегистрированных в исходном объекте RowSet, не должна распространяться на новые копии RowSet. Также должны сохраняться все установленные ограничения.
Возвращает:
новый объект RowSet, являющийся глубокой копией этого объекта CachedRowSet и полностью независимый от него CachedRowSet
Исключения:
SQLException — если при создании копии этого объекта CachedRowSet возникает ошибка
См. также:
  • createShared()
  • createCopySchema()
  • createCopyNoConstraints()
  • RowSetEvent
  • RowSetListener

createCopySchema

CachedRowSet createCopySchema() throws SQLException
Создает объект CachedRowSet, являющийся пустой копией этого объекта CachedRowSet. Копия не должна содержать данных, а должна лишь представлять структуру таблицы исходного объекта CachedRowSet. Кроме того, ограничения первичного или внешнего ключа, заданные в исходном объекте CachedRowSet, должны в равной мере применяться к новому пустому объекту CachedRowSet. В отличие от объекта RowSet, созданного вызовом метода createShared, обновления, внесенные в копию этого объекта CachedRowSet с помощью метода createCopySchema, не должны быть видны исходному объекту.

Приложения могут создать объект WebRowSet на основе объекта CachedRowSet, возвращаемого этим методом, чтобы экспортировать определение схемы RowSet в XML для последующего использования.

Возвращает:
пустую копию этого объекта CachedRowSet
Исключения:
SQLException — если при клонировании структуры этого объекта CachedRowSet возникает ошибка
См. также:
  • createShared()
  • createCopySchema()
  • createCopyNoConstraints()
  • RowSetEvent
  • RowSetListener

createCopyNoConstraints

CachedRowSet createCopyNoConstraints() throws SQLException
Создает объект CachedRowSet, являющийся глубокой копией данных этого объекта CachedRowSet, но независимый от него. В отличие от объекта RowSet, созданного вызовом метода createShared, обновления, внесенные в копию этого объекта CachedRowSet, не должны быть видны исходному объекту. Кроме того, область действия любых слушателей событий, зарегистрированных в этом объекте CachedRowSet, не должна распространяться на новый объект RowSet. Также ограничения, установленные для этого объекта CachedRowSet, не должны сохраняться в копии.
Возвращает:
новый объект CachedRowSet, являющийся глубокой копией этого объекта CachedRowSet и полностью независимый от него CachedRowSet
Исключения:
SQLException — если при создании копии этого объекта CachedRowSet возникает ошибка
См. также:
  • createCopy()
  • createShared()
  • createCopySchema()
  • RowSetEvent
  • RowSetListener

getRowSetWarnings

RowSetWarning getRowSetWarnings() throws SQLException
Получает первое предупреждение, возникшее при вызовах этого объекта RowSet. Последующие предупреждения для этого объекта RowSet будут добавлены в цепочку объекта RowSetWarning, возвращаемого этим методом. Цепочка предупреждений автоматически очищается при каждом чтении новой строки. Этот метод нельзя вызывать для закрытого объекта RowSet; в противном случае будет выброшено исключение SQLException.
Возвращает:
RowSetWarning — первый сообщенный объект RowSetWarning или null, если предупреждений нет
Исключения:
SQLException — если этот метод вызван для закрытого RowSet
См. также:
  • RowSetWarning

getShowDeleted

boolean getShowDeleted() throws SQLException
Получает значение boolean, указывающее, отображаются ли в наборе текущих строк строки, помеченные для удаления. Если возвращается true, удаленные строки видны вместе с текущими строками. Если возвращается false, удаленные строки не отображаются в наборе текущих строк. Значение по умолчанию — false.

Стандартные реализации набора строк могут ограничивать такое поведение из соображений безопасности или для лучшего соответствия определенным сценариям развертывания. Это определяется реализацией и не является стандартным поведением.

Примечание. Возможность отображения удаленных строк усложняет поведение некоторых стандартных методов реализаций JDBC RowSet. Однако большинство пользователей наборов строк могут не учитывать эту особенность, поскольку, вероятно, воспользоваться ею захотят только узкоспециализированные приложения.

Возвращает:
true, если удаленные строки видны; в противном случае — false
Исключения:
SQLException — если реализация набора строк не может определить, отображаются ли строки, помеченные для удаления
См. также:
  • setShowDeleted(boolean)

setShowDeleted

void setShowDeleted(boolean b) throws SQLException
Задает для свойства showDeleted указанное значение boolean, определяющее, отображаются ли в наборе текущих строк строки, помеченные для удаления. Если задано значение true, удаленные строки сразу становятся видны в наборе текущих строк. Если задано значение false, удаленные строки скрываются из текущего набора строк.

Стандартные реализации набора строк могут ограничивать такое поведение из соображений безопасности или для лучшего соответствия определенным сценариям развертывания. Это определяется реализацией и не является стандартным поведением.

Параметры:
b — true, если удаленные строки следует отображать; в противном случае — false
Исключения:
SQLException — если реализация набора строк не может изменить настройку видимости удаленных строк
См. также:
  • getShowDeleted()

commit

void commit() throws SQLException
Поле SyncProvider каждого объекта CachedRowSet содержит объект Connection, полученный из ResultSet или свойств JDBC, переданных конструктору. Этот метод оборачивает метод фиксации Connection, обеспечивая поддержку гибкого управления транзакциями с автоматической фиксацией или без нее.

Делает постоянными все изменения, выполненные методом acceptChanges() после предыдущей фиксации или отката. Этот метод следует использовать только при отключенном режиме автоматической фиксации.

Исключения:
SQLException — если произошла ошибка доступа к базе данных или объект Connection внутри этого CachedRowSet находится в режиме автоматической фиксации
См. также:
  • Connection.setAutoCommit(boolean)

rollback

void rollback() throws SQLException
Поле SyncProvider каждого объекта CachedRowSet содержит объект Connection, полученный из исходного ResultSet или свойств JDBC, переданных ему.

Отменяет все изменения, внесенные в текущей транзакции. Этот метод следует использовать только при отключенном режиме автоматической фиксации.

Исключения:
SQLException — если произошла ошибка доступа к базе данных или объект Connection внутри этого CachedRowSet находится в режиме автоматической фиксации.

rollback

void rollback(Savepoint s) throws SQLException
Поле SyncProvider каждого объекта CachedRowSet содержит объект Connection, полученный из исходного ResultSet или свойств JDBC, переданных ему.

Отменяет все изменения, внесенные в текущей транзакции, до последней отметки транзакции Savepoint. Этот метод следует использовать только при отключенном режиме автоматической фиксации.

Параметры:
s — отметка транзакции Savepoint
Исключения:
SQLException — если произошла ошибка доступа к базе данных или объект Connection внутри этого CachedRowSet находится в режиме автоматической фиксации.

rowSetPopulated

void rowSetPopulated(RowSetEvent event, int numRows) throws SQLException
Уведомляет зарегистрированных слушателей о том, что объект RowSet в указанном объекте RowSetEvent заполнил дополнительное количество строк. Параметр numRows гарантирует, что это событие будет инициироваться только через каждые numRow.

Источник события можно получить с помощью метода event.getSource.

Параметры:
event — объект RowSetEvent, содержащий объект RowSet, являющийся источником событий
numRows — при заполнении интервал количества строк, по достижении которого должно срабатывать событие CachedRowSet; значение по умолчанию — ноль; значение не может быть меньше fetchSize или нуля
Исключения:
SQLException — numRows < 0 or numRows < getFetchSize()

populate

void populate(ResultSet rs, int startRow) throws SQLException
Заполняет этот объект CachedRowSet данными из указанного объекта ResultSet. Этот метод связан с методом populate(ResultSet), но имеет дополнительный параметр, задающий начальную позицию объекта ResultSet, с которой следует заполнять экземпляр CachedRowSet.

Этот метод можно использовать вместо метода execute, если приложение имеет подключение к открытому объекту ResultSet. Использование метода populate может быть эффективнее использования версии метода execute без параметров, поскольку при этом не открывается новое подключение и не выполняется повторно команда этого объекта CachedRowSet. Использование метода populate удобнее по сравнению с использованием версии метода execute, принимающей объект ResultSet.

Параметры:
rs — объект ResultSet, содержащий данные для чтения в этот объект CachedRowSet
startRow — позиция в объекте ResultSet, с которой следует начать заполнение записей в этом объекте CachedRowSet
Исключения:
SQLException — если передан объект ResultSet со значением null или этот объект CachedRowSet не может получить связанный объект ResultSetMetaData
См. также:
  • execute(Connection)
  • populate(ResultSet)
  • ResultSet
  • ResultSetMetaData

setPageSize

void setPageSize(int size) throws SQLException
Задает размер страницы объекта CachedRowSet. Объект CachedRowSet можно настроить для заполнения пакетами строк размером в одну страницу. При вызове populate() или execute() объект CachedRowSet извлекает следующую страницу в соответствии с исходным SQL-запросом, использованным для заполнения RowSet.
Параметры:
size — размер страницы объекта CachedRowSet
Исключения:
SQLException — если при задании размера страницы объекта CachedRowSet возникает ошибка или размер страницы меньше 0.

getPageSize

int getPageSize()
Возвращает размер страницы объекта CachedRowSet
Возвращает:
размер страницы объекта int

nextPage

boolean nextPage() throws SQLException
Переходит к следующей странице объекта CachedRowSet. В результате реализация CachedRowSet извлекает строки следующей страницы и заполняет RowSet, если в рамках исходного SQL-запроса, использованного для заполнения RowSet, остались строки.
Возвращает:
true, если имеются следующие страницы; false, если это последняя страница
Исключения:
SQLException — если при извлечении следующей страницы возникает ошибка или если этот метод вызван преждевременно, до вызова populate или execute.

previousPage

boolean previousPage() throws SQLException
Переходит к предыдущей странице объекта CachedRowSet. В результате реализация CachedRowSet извлекает строки предыдущей страницы и заполняет RowSet. Количество строк, возвращаемых на предыдущей странице, всегда должно оставаться в пределах исходного SQL-запроса, использованного для заполнения RowSet.
Возвращает:
true, если предыдущая страница успешно получена; false, если это первая страница.
Исключения:
SQLException — если при извлечении предыдущей страницы возникает ошибка или если этот метод вызван преждевременно, до вызова populate или execute.

Сообщить об ошибке или предложить улучшение
Дополнительные справочные материалы по API и документацию для разработчиков см. в документации Java SE, содержащей более подробные описания для разработчиков, обзоры концепций, определения терминов, обходные решения и примеры работающего кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или ее аффилированных лиц в США и других странах.
Авторские права © 1993, 2025, Oracle и/или ее аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/25/docs/api/java.sql.rowset/javax/sql/rowset/CachedRowSet.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API