Интерфейс CachedRowSet
- Все суперинтерфейсы:
- AutoCloseable, Joinable, ResultSet, RowSet, Wrapper
- Все известные подинтерфейсы:
- FilteredRowSet, JoinRowSet, WebRowSet
public interface CachedRowSet extends RowSet, Joinable
Интерфейс, который должны реализовывать все стандартные реализации CachedRowSet.
Реализация по умолчанию интерфейса CachedRowSet, предоставляемая компанией Oracle Corporation, является стандартной реализацией. Разработчики могут использовать эту реализацию как есть, расширить ее или написать собственные реализации этого интерфейса.
Объект 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 он будет использовать.
- Указание имени реализации в конструктор
Следующая строка кода создаёт объектCachedRowSetcrs2, который инициализируется значениями по умолчанию, за исключением того, что его объектSyncProviderявляется указанным.CachedRowSetImpl crs2 = new CachedRowSetImpl( "com.fred.providers.HighAvailabilityProvider"); - Установка объекта
SyncProviderс помощью методаCachedRowSetsetSyncProvider
Следующая строка кода сбрасывает объектSyncProviderдля объекта crs, созданного с конструктором по умолчанию.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.
Для использования процедуры оптимистического управления конкурентностью, объект RIOptismisticProvider сохраняет как своё текущее значение, так и своё исходное значение (значение, которое имело место непосредственно перед текущим значением). Обратите внимание, что если изменения данных в объекте 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 с теми же данными. В результате он может быть особенно подходящим для отправки данных тонкому клиенту, такому как КПК, где использование драйвера 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 для подключения, ему необходимо установить свойство JDBC URL, определяющее соответствующий драйвер, а также свойства, содержащие имя пользователя и пароль. Если же набор строк использует объект DataSource для подключения, что является предпочтительным методом, ему не нужно устанавливать свойство JDBC URL. Вместо этого ему необходимо установить свойства для логического имени источника данных, имени пользователя и пароля. ПРИМЕЧАНИЕ: Для использования объекта 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 = ?"); Значения, которые будут использоваться для установки параметров-заменителей команды, содержатся в поле RowSet объекта params, которое является объектом 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 объект 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
}
}
Поля
| Модификатор и тип | Поле и описание |
|---|---|
static boolean |
COMMIT_ON_ACCEPT_CHANGES Устаревший. Поскольку это поле является конечным (является частью интерфейса), его значение нельзя изменить. |
Поля, унаследованные от интерфейса 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 Методы
| Модификатор и тип | Метод и описание |
|---|---|
void |
acceptChanges() Распространяет изменения обновлений, вставки и удаления строк, внесенные в этот |
void |
acceptChanges(Connection con) Распространяет все изменения обновлений, вставки и удаления строк в источник данных, поддерживающий этот |
boolean |
columnUpdated(int idx) Указывает, была ли обновлена указанная колонка в текущей строке этого |
boolean |
columnUpdated(String columnName) Указывает, была ли обновлена указанная колонка в текущей строке этого |
void |
commit() Каждому |
CachedRowSet |
createCopy() Создаёт |
CachedRowSet |
createCopyNoConstraints() Создаёт |
CachedRowSet |
createCopySchema() Создаёт |
RowSet |
createShared() Возвращает новый |
void |
execute(Connection conn) Заполняет этот |
int[] |
getKeyColumns() Возвращает массив, содержащий один или несколько номеров столбцов, указывающих столбцы, образующие ключ, уникально идентифицирующий строку в этом |
ResultSet |
getOriginal() Возвращает |
ResultSet |
getOriginalRow() Возвращает |
int |
getPageSize() Возвращает размер страницы для |
RowSetWarning |
getRowSetWarnings() Получает первое предупреждение, сообщённое вызовами этого |
boolean |
getShowDeleted() Получает |
SyncProvider |
getSyncProvider() Получает реализацию |
String |
getTableName() Возвращает идентификатор объекта (таблицы), который использовался для создания этого |
boolean |
nextPage() Увеличивает текущую страницу |
void |
populate(ResultSet data) Заполняет этот |
void |
populate(ResultSet rs,
int startRow) Заполняет этот |
boolean |
previousPage() Уменьшает текущую страницу |
void |
release() Освобождает текущее содержимое этого |
void |
restoreOriginal() Восстанавливает этот |
void |
rollback() Каждому |
void |
rollback(Savepoint s) Каждому |
void |
rowSetPopulated(RowSetEvent event,
int numRows) Уведомляет зарегистрированных слушателей, что объект RowSet в данном объекте RowSetEvent заполнил ряд дополнительных строк. |
void |
setKeyColumns(int[] keys) Устанавливает поле |
void |
setMetaData(RowSetMetaData md) Устанавливает метаданные для этого |
void |
setOriginalRow() Устанавливает текущую строку в этом |
void |
setPageSize(int size) Устанавливает размер страницы для |
void |
setShowDeleted(boolean b) Устанавливает свойство |
void |
setSyncProvider(String provider) Устанавливает |
void |
setTableName(String tabName) Устанавливает идентификатор таблицы, из которой был получен этот |
int |
size() Возвращает количество строк в этом |
Collection<?> |
toCollection() Преобразует этот |
Collection<?> |
toCollection(int column) Преобразует указанную колонку в этом |
Collection<?> |
toCollection(String column) Преобразует указанную колонку в этом |
void |
undoDelete() Отменяет удаление текущей строки и уведомляет слушателей о том, что строка изменилась. |
void |
undoInsert() Немедленно удаляет текущую строку из этого |
void |
undoUpdate() Немедленно отменяет последнюю операцию обновления, если строка была изменена. |
Методы, унаследованные от интерфейса 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, 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 Методы, унаследованные от интерфейса java.sql.Wrapper
isWrapperFor, unwrap Методы, унаследованные от интерфейса javax.sql.rowset.Joinable
getMatchColumnIndexes, getMatchColumnNames, setMatchColumn, setMatchColumn, setMatchColumn, setMatchColumn, unsetMatchColumn, unsetMatchColumn, unsetMatchColumn, unsetMatchColumn Поля
COMMIT_ON_ACCEPT_CHANGES
@Deprecated static final boolean COMMIT_ON_ACCEPT_CHANGES
Устаревшее. Поскольку это поле является final (оно является частью интерфейса), его значение изменить нельзя.
Вызывает, чтобы объект CachedRowSet выполнил коммит изменений при вызове метода acceptChanges(). Если установлено в 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(java.sql.Connection),ResultSet,ResultSetMetaData
execute
void execute(Connection conn)
throws SQLException Заполняет этот объект CachedRowSet данными, используя предоставленное подключение для создания набора результатов, из которого будут считываться данные. Этот метод должен закрывать все созданные подключения к базе данных, чтобы гарантировать, что этот объект CachedRowSet отключён, за исключением случаев чтения данных из источника данных или записи данных в источник данных.
Чтение для этого объекта CachedRowSet будет использовать conn для установления соединения с источником данных, чтобы он мог выполнить команду набора строк и считать данные из полученного объекта ResultSet в этот объект CachedRowSet. Этот метод также закрывает conn после заполнения этого объекта CachedRowSet.
Если этот метод вызывается, когда реализация уже заполнена, содержимое и метаданные (пере)устанавливаются. Кроме того, если этот метод вызывается до того, как метод acceptChanges был вызван для фиксации незавершенных обновлений, эти обновления теряются.
- Параметры:
-
conn- стандартный объект JDBCConnectionс допустимыми свойствами - Исключения:
-
SQLException- если предоставлен недопустимый объектConnectionили произошла ошибка при установлении соединения с источником данных - См. также:
-
populate(java.sql.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 или нет. Если оно установлено в 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 или нет. Если оно установлено в true, все обновления в синхронизации фиксируются в источнике данных. В противном случае приложение должно явно вызвать методы commit или rollback соответственно.
- Параметры:
-
con- стандартный объект JDBCConnection - Исключения:
-
SyncProviderException- если записыватель базового поставщика синхронизации не может записать обновления обратно в источник данных - См. также:
-
acceptChanges(),RowSetWriter,SyncFactory,SyncProvider,SyncProviderException,SyncResolver
restoreOriginal
void restoreOriginal()
throws SQLException Восстанавливает этот объект CachedRowSet до его исходного значения, то есть до значения перед последним набором изменений. Если в наборе строк не было изменений или был только один набор изменений, исходное значение — это значение, с которым был заполнен этот объект CachedRowSet; в противном случае исходное значение — это значение, которое он имел непосредственно перед текущим значением.
При вызове этого метода реализация CachedRowSet должна гарантировать, что все обновления, вставки и удаления в текущем экземпляре набора строк заменены предыдущими значениями. Кроме того, курсор должен быть сброшен к первой строке, и должно быть выпущено событие rowSetChanged, чтобы уведомить все зарегистрированные слушатели.
- Исключения:
-
SQLException- если произошла ошибка при откате текущего значения этого объектаCachedRowSetк его предыдущему значению - См. также:
RowSetListener.rowSetChanged(javax.sql.RowSetEvent)
release
void release()
throws SQLException Освобождает текущее содержимое этого объекта CachedRowSet и отправляет событие rowSetChanged всем зарегистрированным слушателям. Любые незавершенные обновления отбрасываются, и набор строк не содержит строк после вызова этого метода. Взаимодействия с базовым источником данных нет, и содержимое набора строк, метаданные и обновления содержимого должны быть необратимыми.
Объект CachedRowSet должен блокироваться до тех пор, пока его содержимое и связанные обновления не будут полностью очищены, тем самым предотвращая «грязные» чтения другими компонентами, удерживающими ссылку на этот объект RowSet. Кроме того, содержимое не может быть освобождено до тех пор, пока все компоненты, читающие этот объект CachedRowSet, не завершат чтение. Объект CachedRowSet должен вернуться к нормальному поведению после запуска события rowSetChanged.
Метаданные, включая свойства JDBC и свойства SPI синхронизации, сохраняются для будущего использования. Важно, чтобы такие свойства, как свойство command, были актуальны для исходного источника данных, из которого был первоначально создан объект CachedRowSet.
Этот метод очищает набор строк, в отличие от метода close, который помечает весь набор строк как восстанавливаемый, чтобы позволить сборщику мусора использовать ресурсы виртуальной машины Java набора строк.
- Возбуждает:
-
SQLException- если произошла ошибка при сбросе содержимого этого объектаCachedRowSet - См. также:
-
RowSetListener.rowSetChanged(javax.sql.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- идентификатор столбца, подлежащий проверке на наличие обновлений - Возвращает:
-
trueесли указанный столбец был явно обновлен;falseв противном случае - Возбуждает:
-
SQLException- если курсор находится в строке вставки, перед первой строкой или после последней строки - См. также:
DatabaseMetaData.updatesAreDetected(int)
columnUpdated
boolean columnUpdated(String columnName)
throws SQLException Указывает, был ли обновлен указанный столбец в текущей строке этого объекта CachedRowSet.
- Параметры:
-
columnName- объект, содержащий имя столбца, подлежащий проверке на наличие обновлений - Возвращает:
-
trueесли столбец был явно обновлен;falseв противном случае - Возбуждает:
-
SQLException- если курсор находится в строке вставки, перед первой строкой или после последней строки - См. также:
DatabaseMetaData.updatesAreDetected(int)
toCollection
Collection<?> toCollection()
throws SQLException Преобразует этот объект CachedRowSet в объект Collection, содержащий все данные этого объекта CachedRowSet. Реализации имеют некоторую свободу в представлении этого объекта Collection, из-за абстрактной природы фреймворка Collection. Каждая строка должна быть полностью представлена в реализации общего назначения Collection или специализированной реализации Collection, такой как объект TreeMap или объект Vector. Значение столбца SQL NULL должно быть представлено как null на языке программирования Java.
Стандартная реализация для интерфейса 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 должно быть представлено как null на языке программирования Java.
Стандартная реализация использует объект Vector для хранения значений столбцов, и ожидается, что большинство реализаций сделают то же самое. Если используется объект Vector, его размер должен быть ровно равен количеству строк в этом объекте CachedRowSet.
- Параметры:
-
column- целое число, обозначающее столбец, чьи значения должны быть представлены в объектеCollection - Возвращает:
- объект
Collection, содержащий значения, хранящиеся в указанном столбце этого объектаCachedRowSet - Возбуждает:
-
SQLException- если при создании коллекции произошла ошибка или был предоставлен недопустимый идентификатор столбца - См. также:
-
toCollection(),toCollection(String)
toCollection
Collection<?> toCollection(String column)
throws SQLException Преобразует указанный столбец в этом объекте CachedRowSet в объект Collection. Реализации имеют некоторую свободу в представлении этого объекта Collection, из-за абстрактной природы фреймворка Collection. Каждое значение столбца должно быть полностью представлено в реализации общего назначения Collection или специализированной реализации Collection, такой как объект Vector. Значение столбца SQL NULL должно быть представлено как null на языке программирования Java.
Стандартная реализация использует объект Vector для хранения значений столбцов, и ожидается, что большинство реализаций сделают то же самое. Если используется объект Vector, его размер должен быть ровно равен количеству строк в этом объекте CachedRowSet.
- Параметры:
-
column- объект, содержащий имя столбца, чьи значения должны быть представлены в коллекции - Возвращает:
- объект
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, оно, в свою очередь, вызывает метод reader's readData для заполнения объекта RowSet. rowsetReader.readData((RowSetInternal)this);
Кроме того, приложение может использовать объект SyncProvider, возвращаемый этим методом, для вызова методов, которые возвращают информацию об объекте SyncProvider, включая информацию о поставщике, версии, идентификаторе поставщика, уровне синхронизации и блокировках, которые в настоящее время установлены.
- Возвращает:
- объект
SyncProvider, который был установлен при создании набора строк, или, если он не был установлен, — поставщик по умолчанию - Выбрасывает:
-
SQLException- если при возвращении объектаSyncProviderпроизошла ошибка - См. также:
setSyncProvider(java.lang.String)
setSyncProvider
void setSyncProvider(String provider)
throws SQLException Устанавливает объект SyncProvider для этого объекта CachedRowSet на указанный. Этот метод позволяет сбросить объект SyncProvider.
Реализация CachedRowSet всегда должна создаваться с доступным механизмом 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, java.lang.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 Устанавливает поле CachedRowSet этого объекта keyCols с заданным массивом номеров столбцов, который образует ключ для однозначной идентификации строки в этом объекте 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.
Стандартные реализации rowset могут ограничивать это поведение из-за соображений безопасности или для лучшей адаптации к определённым сценариям развертывания. Это оставлено на усмотрение реализации и не является стандартным поведением.
Примечание: разрешение удалённых строк отображаться усложняет поведение некоторых стандартных методов JDBC RowSet. Однако большинство пользователей rowset могут просто игнорировать эту дополнительную деталь, поскольку только очень специализированные приложения, скорее всего, захотят воспользоваться этой функцией.
- Возвращает:
-
true, если удалённые строки отображаются;falseв противном случае - Выбрасывает:
-
SQLException- если реализация rowset не может определить, отображаются ли строки, помеченные для удаления - См. также:
setShowDeleted(boolean)
setShowDeleted
void setShowDeleted(boolean b)
throws SQLException Устанавливает свойство showDeleted в заданное значение boolean , определяющее, отображаются ли строки, помеченные для удаления, в наборе текущих строк. Если значение установлено в true , удалённые строки сразу же отображаются в наборе текущих строк. Если значение установлено в false , удалённые строки отображаются как скрытые в текущем наборе строк.
Стандартные реализации rowset могут ограничивать это поведение из-за соображений безопасности или для лучшей адаптации к определённым сценариям развертывания. Это оставлено на усмотрение реализации и не является стандартным поведением.
- Параметры:
-
b-true, если удалённые строки должны отображаться;falseв противном случае - Выбрасывает:
-
SQLException- если реализация rowset не может сбросить отображение удалённых строк - См. также:
getShowDeleted()
commit
void commit()
throws SQLException Каждый объект CachedRowSet содержит объект Connection из свойств ResultSet или JDBC, переданных в его конструкторы. Этот метод оборачивает метод Connection commit, чтобы обеспечить гибкую поддержку автоматического или неавтоматического контроля транзакций.
Делает все изменения, выполненные методом acceptChanges() с момента предыдущего commit/rollback, постоянными. Этот метод следует использовать только при отключенном режиме автоматического подтверждения.
- Выбрасывает:
-
SQLException- если произошла ошибка доступа к базе данных или объект Connection в этом объектеCachedRowSetнаходится в режиме автоматического подтверждения - См. также:
Connection.setAutoCommit(boolean)
rollback
void rollback()
throws SQLException Каждый объект CachedRowSet содержит объект Connection из исходных свойств ResultSet или JDBC, переданных в конструкторы.
Отменяет все изменения, внесённые в текущей транзакции. Этот метод следует использовать только при отключенном режиме автоматического подтверждения.
- Выбрасывает:
-
SQLException- если произошла ошибка доступа к базе данных или объект Connection в этом объектеCachedRowSetнаходится в режиме автоматического подтверждения.
rollback
void rollback(Savepoint s)
throws SQLException Каждый объект 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.
- Параметры:
-
startRow- позиция вResultSet, с которой начинать заполнение записей в этом объектеCachedRowSet -
rs- объектResultSet, содержащий данные для чтения в этот объектCachedRowSet - Исключения:
-
SQLException- если предоставлен нулевой объектResultSetили этот объектCachedRowSetне может получить связанный объектResultSetMetaData - См. также:
-
execute(java.sql.Connection),populate(ResultSet),ResultSet,ResultSetMetaData
setPageSize
void setPageSize(int size)
throws SQLException Устанавливает размер страницы объекта CachedRowSet. Объект CachedRowSet может быть настроен на заполнение себя партиями строк размером страницы. Когда вызываются populate() или execute(), CachedRowSet извлекает дополнительную страницу в соответствии с исходным SQL-запросом, используемым для заполнения набора строк.
- Параметры:
-
size- размер страницы объектаCachedRowSet - Исключения:
-
SQLException- если при установке размера страницыCachedRowSetпроизошла ошибка, или размер страницы меньше 0.
getPageSize
int getPageSize()
Возвращает размер страницы для объекта CachedRowSet
- Возвращает:
- размер страницы
int
nextPage
boolean nextPage()
throws SQLException Увеличивает текущую страницу CachedRowSet. Это заставляет реализацию CachedRowSet извлечь строки следующей страницы размером страницы и заполнить набор строк, если оставшиеся строки остаются в рамках исходного SQL-запроса, используемого для заполнения набора строк.
- Возвращает:
- true, если существуют другие страницы; false, если это последняя страница
- Исключения:
-
SQLException- если при извлечении следующей страницы произошла ошибка, или если этот метод вызван преждевременно до populate или execute.
previousPage
boolean previousPage()
throws SQLException Уменьшает текущую страницу объекта CachedRowSet. Это заставляет реализацию CachedRowSet извлечь строки предыдущей страницы размером страницы и заполнить набор строк. Количество строк, возвращаемых на предыдущей странице, всегда должно оставаться в рамках исходного SQL-запроса, используемого для заполнения набора строк.
- Возвращает:
- true, если предыдущая страница успешно извлечена; false, если это первая страница
- Исключения:
-
SQLException- если при извлечении предыдущей страницы произошла ошибка, или если этот метод вызван преждевременно до populate или execute.
© 1993, 2020, 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.