Интерфейс 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 он будет использовать.
- Указание имени реализации в конструктор
Следующая строка кода создаёт объектCachedRowSetcrs2 , который инициализирован значениями по умолчанию, за исключением того, что его объектSyncProvider— это заданный объект.CachedRowSetImpl crs2 = new CachedRowSetImpl( "com.fred.providers.HighAvailabilityProvider"); - Установка объекта
SyncProviderс помощью методаCachedRowSetsetSyncProvider
Следующая строка кода сбрасывает объект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 с теми же данными. В результате он может быть особенно подходящим для отправки данных тонкому клиенту, такому как КПК, где использование драйвера 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 Paginация данных
Поскольку объект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 Следующий фрагмент кода демонстрирует заполнение объекта 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 возвращает объект 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 вернул курсор на последнюю строку. После прохождения всех строк на последней странице (объект 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
}
}
- Since:
- 1.5
Краткое описание полей
| Modifier and Type | Field | Description |
|---|---|---|
static final boolean |
COMMIT_ON_ACCEPT_CHANGES |
Deprecated. Поскольку это поле final (оно является частью интерфейса), его значение нельзя изменить. |
Поля, объявленные в интерфейсе 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() |
Распространяет изменения строк (обновление, вставка и удаление), внесённые в этот объект CachedRowSet, на базовый источник данных. |
void |
acceptChanges |
Распространяет все изменения строк (обновление, вставка и удаление) в источник данных, поддерживающий этот объект CachedRowSet, используя указанный объект Connection для установления соединения с источником данных. |
boolean |
columnUpdated |
Указывает, была ли обновлена указанная колонка в текущей строке этого объекта CachedRowSet. |
boolean |
columnUpdated |
Указывает, была ли обновлена указанная колонка в текущей строке этого объекта CachedRowSet. |
void |
commit() |
Свойство SyncProvider каждого объекта CachedRowSet содержит объект Connection из ResultSet или JDBC свойств, переданных в его конструкторы. |
CachedRowSet |
createCopy() |
Создаёт объект RowSet, представляющий собой глубокую копию данных в этом объекте CachedRowSet. |
CachedRowSet |
createCopyNoConstraints() |
Создаёт объект CachedRowSet, представляющий собой глубокую копию данных этого объекта CachedRowSet, но независимый от него. |
CachedRowSet |
createCopySchema() |
Создаёт пустую копию объекта CachedRowSet этого объекта CachedRowSet. |
RowSet |
createShared() |
Возвращает новый объект RowSet с той же базой данных, что и этот объект CachedRowSet. |
void |
execute |
Заполняет этот объект 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 |
Заполняет этот объект CachedRowSet данными из заданного объекта ResultSet. |
void |
populate |
Заполняет этот объект CachedRowSet данными из заданного объекта ResultSet. |
boolean |
previousPage() |
Уменьшает текущую страницу объекта CachedRowSet. |
void |
release() |
Освобождает текущее содержимое этого объекта CachedRowSet и отправляет событие rowSetChanged всем зарегистрированным слушателям. |
void |
restoreOriginal() |
Восстанавливает этот объект CachedRowSet до его первоначального значения, т.е. значения до последнего набора изменений. |
void |
rollback() |
Свойство SyncProvider каждого объекта CachedRowSet содержит объект Connection из исходных ResultSet или JDBC свойств, переданных в него. |
void |
rollback |
Свойство SyncProvider каждого объекта CachedRowSet содержит объект Connection из исходных ResultSet или JDBC свойств, переданных в него. |
void |
rowSetPopulated |
Уведомляет зарегистрированных слушателей о том, что объект RowSet в заданном объекте RowSetEvent заполнил несколько дополнительных строк. |
void |
setKeyColumns |
Устанавливает поле keyCols этого объекта CachedRowSet с заданным массивом номеров столбцов, который образует ключ для уникальной идентификации строки в этом объекте CachedRowSet. |
void |
setMetaData |
Устанавливает метаданные для этого объекта CachedRowSet с помощью заданного объекта RowSetMetaData. |
void |
setOriginalRow() |
Устанавливает текущую строку в этом объекте CachedRowSet как исходную строку. |
void |
setPageSize |
Устанавливает размер страницы объекта CachedRowSet. |
void |
setShowDeleted |
Устанавливает свойство showDeleted заданному значению boolean, которое определяет, отображаются ли строки, помеченные для удаления, в наборе текущих строк. |
void |
setSyncProvider |
Устанавливает объект SyncProvider для этого объекта CachedRowSet в указанный. |
void |
setTableName |
Устанавливает идентификатор таблицы, из которой был получен этот объект CachedRowSet, в заданное имя таблицы. |
int |
size() |
Возвращает количество строк в этом объекте CachedRowSet. |
Collection<?> |
toCollection() |
Преобразует этот объект CachedRowSet в объект Collection, содержащий все данные этого объекта CachedRowSet. |
Collection<?> |
toCollection |
Преобразует указанный столбец в этом объекте CachedRowSet в объект Collection. |
Collection<?> |
toCollection |
Преобразует указанный столбец в этом объекте CachedRowSet в объект Collection. |
void |
undoDelete() |
Отменяет удаление текущей строки и уведомляет слушателей о том, что строка изменилась. |
void |
undoInsert() |
Немедленно удаляет текущую строку из этого объекта CachedRowSet, если строка была вставлена, и также уведомляет слушателей о том, что строка изменилась. |
void |
undoUpdate() |
Немедленно отменяет последнюю операцию обновления, если строка была изменена. |
Методы, объявленные в интерфейсе javax.sql.rowset.Joinable
getMatchColumnIndexes, getMatchColumnNames, setMatchColumn, setMatchColumn, setMatchColumn, setMatchColumn, unsetMatchColumn, unsetMatchColumn, unsetMatchColumn, unsetMatchColumn
Методы, объявленные в интерфейсе 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
Методы, объявленные в интерфейсе 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.Wrapper
isWrapperFor, unwrap
Подробное описание полей
COMMIT_ON_ACCEPT_CHANGES
@Deprecated static final boolean COMMIT_ON_ACCEPT_CHANGES
SyncProvider объекта CachedRowSet для фиксации изменений при вызове acceptChanges(). Если значение установлено в false, изменения будут не зафиксированы до вызова одного из методов транзакции интерфейса CachedRowSet. - См. также:
Подробное описание методов
populate
void populate(ResultSet data) throws SQLException
CachedRowSet данными из заданного объекта ResultSet. Этот метод может быть использован в качестве альтернативы методу execute в тех случаях, когда приложение имеет подключение к открытому объекту ResultSet. Использование метода populate может быть более эффективным, чем использование версии метода execute, не принимающей параметры, поскольку оно не открывает новое подключение и не повторно выполняет команду объекта CachedRowSet. Использование метода populate удобнее по сравнению с использованием версии метода execute, принимающего объект ResultSet.
- Параметры:
-
data- объектResultSet, содержащий данные, которые нужно считать в этот объектCachedRowSet - Исключения:
-
SQLException- если предоставлен null-объектResultSetили этот объектCachedRowSetне может получить связанный объектResultSetMetaData - См. также:
execute
void execute(Connection conn) throws SQLException
CachedRowSet данными, используя предоставленное подключение для получения набора результатов, из которого будут считываться данные. Этот метод должен закрывать все созданные подключения к базе данных, чтобы гарантировать, что этот объект CachedRowSet отключен, за исключением случаев чтения данных из источника данных или записи данных в источник данных. Чтец для этого объекта CachedRowSet будет использовать conn для установления подключения к источнику данных, чтобы он мог выполнить команду набора строк и считать данные из полученного объекта ResultSet в этот объект CachedRowSet . Этот метод также закрывает conn после заполнения этого объекта CachedRowSet.
Если этот метод вызывается, когда реализация уже заполнена, содержимое и метаданные (пере)устанавливаются. Кроме того, если этот метод вызывается до вызова метода acceptChanges для фиксации незавершенных обновлений, эти обновления теряются.
- Параметры:
-
conn- стандартный JDBC-объектConnectionс допустимыми свойствами - Исключения:
-
SQLException- если предоставлен некорректный объект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
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 в соответствии с ситуацией.
- Parameters:
-
con- стандартный JDBCConnectionобъект - Throws:
-
SyncProviderException- если внутренний поставщик синхронизации не может записать обновления обратно в источник данных - See Also:
restoreOriginal
void restoreOriginal() throws SQLException
CachedRowSet объект до его исходного значения, то есть до значения перед последним набором изменений. Если изменений в наборе строк не было или было только одно изменение, исходное значение - это значение, с которым этот CachedRowSet объект был заполнен; в противном случае - значение, которое он имел непосредственно перед своим текущим значением. При вызове этого метода реализация CachedRowSet должна гарантировать, что все обновления, вставки и удаления в текущем экземпляре набора строк заменены предыдущими значениями. Кроме того, курсор должен быть сброшен к первой строке, и должен быть сгенерирован событие rowSetChanged, чтобы уведомить всех зарегистрированных слушателей.
- Throws:
-
SQLException- если произошла ошибка при откате текущего значения этогоCachedRowSetобъекта к его предыдущему значению - See Also:
release
void release() throws SQLException
CachedRowSet объекта и отправляет событие rowSetChanged всем зарегистрированным слушателям. Любые незавершенные обновления отбрасываются, и набор строк не содержит строк после вызова этого метода. Нет взаимодействий с базовым источником данных, и любое содержимое набора строк, метаданные и обновления содержимого должны быть невосстановимыми. Этот CachedRowSet объект должен быть заблокирован до тех пор, пока его содержимое и связанные обновления не будут полностью очищены, тем самым предотвращая «грязные» чтение другими компонентами, у которых есть ссылка на этот RowSet объект. Кроме того, содержимое не может быть освобождено до тех пор, пока все компоненты, читающие этот CachedRowSet объект, не завершат чтение. Этот CachedRowSet объект должен вернуться к нормальному поведению после срабатывания события rowSetChanged.
Метаданные, включая свойства JDBC и свойства Synchronization SPI, сохраняются для дальнейшего использования. Важно, чтобы свойства, такие как command свойство, были актуальны для исходного источника данных, из которого этот CachedRowSet объект был первоначально создан.
Этот метод очищает набор строк, в отличие от метода close, который помечает весь набор строк как восстанавливаемый, чтобы позволить сборщику мусора освободить ресурсы Java VM набора строк.
- Throws:
-
SQLException- если произошла ошибка при очистке содержимого этогоCachedRowSetобъекта - See Also:
undoDelete
void undoDelete() throws SQLException
Кроме того, многократные отмены удалений строк могут быть выполнены путем изменения позиции курсора с помощью любого из методов управления позицией курсора, таких как:
-
CachedRowSet.absolute -
CachedRowSet.first -
CachedRowSet.last
- Throws:
-
SQLException- если (1) текущая строка не была удалена или (2) курсор находится в строке вставки, до первой строки или после последней строки - See Also:
undoInsert
void undoInsert() throws SQLException
CachedRowSet объекта, если строка была вставлена, и также уведомляет слушателей об изменении строки. Этот метод может быть вызван в любое время во время существования набора строк и, предполагая, что текущая строка находится в пределах ограничений исключений (см. ниже), он отменяет вставку строки текущей строки. Кроме того, многократные отмены вставок строк могут быть выполнены путем изменения позиции курсора с помощью любого из методов управления позицией курсора, таких как:
-
CachedRowSet.absolute -
CachedRowSet.first -
CachedRowSet.last
- Throws:
-
SQLException- если (1) текущая строка не была вставлена или (2) курсор находится до первой строки, после последней строки или в строке вставки - See Also:
undoUpdate
void undoUpdate() throws SQLException
acceptChanges) или заполнением. Этот метод также может быть вызван во время выполнения обновлений в строке вставки. undoUpdate может быть вызван в любое время во время существования набора строк; однако, после синхронизации этот метод не имеет эффекта до тех пор, пока не произойдут дальнейшие изменения данных в наборе строк.
- Throws:
-
SQLException- если курсор находится перед первой строкой или после последней строки в этомCachedRowSetобъекте - See Also:
columnUpdated
boolean columnUpdated(int idx) throws SQLException
CachedRowSet. - Parameters:
-
idx-intидентифицирующий столбец, который необходимо проверить на наличие обновлений - Returns:
-
trueесли указанный столбец был явно обновлён;falseв противном случае - Throws:
-
SQLException- если курсор находится в строке вставки, перед первой строкой или после последней строки - See Also:
columnUpdated
boolean columnUpdated(String columnName) throws SQLException
CachedRowSet объекта.- Parameters:
-
columnName- объектString, указывающий имя колонки, которую нужно проверить на обновление - Returns:
-
trueесли колонка была явно обновлена;falseв противном случае - Throws:
-
SQLException- если курсор находится на строке вставки, до первой строки или после последней строки - See Also:
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 данных.
- Returns:
- объект
Collection, содержащий значения в каждой строке в этомCachedRowSetобъекте - Throws:
-
SQLException- если при генерации коллекции произошла ошибка - See Also:
toCollection
Collection<?> toCollection(int column) throws SQLException
CachedRowSet объекте в объект Collection. Реализации имеют некоторую свободу в том, как они могут представлять этот Collection объект из-за абстрактной природы фреймворка Collection. Каждое значение столбца должно быть полностью представлено либо в общем случае в реализации Collection, либо в специализированной реализации Collection, например, в объекте Vector. Значение SQL NULL столбца должно быть представлено как null в языке программирования Java. Стандартная реализация использует объект Vector для хранения значений столбцов, и ожидается, что большинство реализаций будут делать то же самое. Если используется объект Vector, его размер должен точно соответствовать количеству строк в этом CachedRowSet объекте.
- Parameters:
-
column-int, указывающий столбец, значения которого должны быть представлены в объектеCollection - Returns:
- объект
Collection, содержащий значения, хранящиеся в указанном столбце этогоCachedRowSetобъекта - Throws:
-
SQLException- если при генерации коллекции произошла ошибка или предоставлен недопустимый идентификатор столбца - See Also:
toCollection
Collection<?> toCollection(String column) throws SQLException
CachedRowSet объекте в объект Collection. Реализации имеют некоторую свободу в том, как они могут представлять этот Collection объект из-за абстрактной природы фреймворка Collection. Каждое значение столбца должно быть полностью представлено либо в общем случае в реализации Collection, либо в специализированной реализации Collection, например, в объекте Vector. Значение SQL NULL столбца должно быть представлено как null в языке программирования Java. Стандартная реализация использует объект Vector для хранения значений столбцов, и ожидается, что большинство реализаций будут делать то же самое. Если используется объект Vector, его размер должен точно соответствовать количеству строк в этом CachedRowSet объекте.
- Parameters:
-
column- объектString, указывающий имя столбца, значения которого должны быть представлены в коллекции - Returns:
- объект
Collection, содержащий значения, хранящиеся в указанном столбце этогоCachedRowSetобъекта - Throws:
-
SQLException- если при генерации коллекции произошла ошибка или предоставлен недопустимый идентификатор столбца - See Also:
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, включая информацию о поставщике, версии, идентификаторе поставщика, степени синхронизации и блокировках, которые он в настоящее время установил.
- Returns:
- объект
SyncProvider, установленный при создании набора строк, или, если он не был установлен, поставщик по умолчанию - Throws:
-
SQLException- если при возвращении объектаSyncProviderпроизошла ошибка - See Also:
setSyncProvider
void setSyncProvider(String provider) throws SQLException
SyncProvider для этого объекта CachedRowSet на указанный. Этот метод позволяет сбросить объект SyncProvider. Реализация CachedRowSet всегда должна быть инициализирована с доступным механизмом SyncProvider, но есть случаи, когда сброс объекта SyncProvider желателен или необходим. Например, приложение может временно использовать объект поставщика SyncProvider по умолчанию, а затем выбрать поставщика, который стал доступен позже и лучше соответствует его потребностям.
Сброс объекта SyncProvider заставляет объект RowSet запросить новую реализацию SyncProvider у SyncFactory. Это приводит к сбросу всех предыдущих соединений и отношений с исходным источником данных и потенциально может значительно изменить поведение синхронизации отключенного набора строк.
- Parameters:
-
provider- объектString, содержащий полное имя класса реализацииSyncProvider - Throws:
-
SQLException- если при попытке сбросить реализациюSyncProviderпроизошла ошибка - See Also:
size
int size()
CachedRowSet объекте.- Returns:
- количество строк в наборе строк
setMetaData
void setMetaData(RowSetMetaData md) throws SQLException
CachedRowSet объекта с помощью указанного объекта RowSetMetaData. Когда объект RowSetReader считывает содержимое набора строк, он создает объект RowSetMetaData и инициализирует его с помощью методов реализации RowSetMetaData. Реализация по умолчанию использует класс RowSetMetaDataImpl. Когда обработчик закончил чтение содержимого набора строк, этот метод вызывается внутри для передачи объекта RowSetMetaData в набор строк.- Parameters:
-
md- объектRowSetMetaData, содержащий метаданные о столбцах в этомCachedRowSetобъекте - Throws:
-
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
void setOriginalRow() throws SQLException
CachedRowSet как исходную строку. Этот метод вызывается внутренне после синхронизации любых изменённых значений в текущей строке с источником данных. Текущая строка должна быть помечена как больше не вставленная, удалённая или обновлённая.
Вызов setOriginalRow необратим.
- Исключения:
-
SQLException- если текущей строки нет или при сбросе содержимого исходной строки произошла ошибка - См. также:
getTableName
String getTableName() throws SQLException
CachedRowSet. Это имя может быть установлено несколько раз, и спецификация не накладывает ограничений на то, сколько раз это может произойти, или на то, должны ли стандартные реализации отслеживать предыдущие имена таблиц.- Возвращает:
- объект
String, содержащий имя таблицы, являющейся источником данных для этого объектаCachedRowSetилиnull, если имя таблицы не было установлено - Исключения:
-
SQLException- если при возвращении имени таблицы произошла ошибка - См. также:
setTableName
void setTableName(String tabName) throws SQLException
CachedRowSet, заданным именем таблицы. Писатель использует это имя для определения таблицы, которую следует использовать при сравнении значений в источнике данных со значениями объекта CachedRowSet во время попытки синхронизации. Идентификатор таблицы также указывает, куда следует записывать изменённые значения из объекта CachedRowSet. Реализация этого объекта CachedRowSet может получить имя из объекта RowSetMetaDataImpl.
- Параметры:
-
tabName- объектString, идентифицирующий таблицу, из которой был получен объектCachedRowSet; не может бытьnull, но может быть пустой строкой - Исключения:
-
SQLException- если при присвоении имени таблицы произошла ошибка или tabName имеет значениеnull - См. также:
getKeyColumns
int[] getKeyColumns() throws SQLException
CachedRowSet.- Возвращает:
- массив, содержащий номер столбца или номера, которые указывают, какие столбцы составляют первичный ключ для строки в этом объекте
CachedRowSet. Этот массив должен быть пустым, если нет столбцов, являющихся представителями первичного ключа. - Исключения:
-
SQLException- если этот объектCachedRowSetпуст - См. также:
setKeyColumns
void setKeyColumns(int[] keys) throws SQLException
CachedRowSet этого объекта keyCols заданным массивом номеров столбцов, которые образуют ключ для уникальной идентификации строки в этом объекте CachedRowSet. Если объект CachedRowSet становится частью объекта JoinRowSet , ключи, определённые этим методом и полученные ограничения, сохраняются, если столбцы, обозначенные как столбцы ключа, также становятся столбцами соответствия.
- Параметры:
-
keys- массивint, указывающий столбцы, которые образуют первичный ключ для объектаCachedRowSet; каждый элемент массива должен быть больше0и меньше или равен количеству столбцов в этом наборе строк - Исключения:
-
SQLException- если какой-либо из чисел в заданном массиве недействителен для этого набора строк - См. также:
createCopy
CachedRowSet createCopy() throws SQLException
RowSet , который является глубокой копией данных в этом объекте CachedRowSet. В отличие от объекта RowSet , сгенерированного вызовом createShared , обновления, внесённые в копию исходного объекта RowSet , не должны быть видны исходному объекту RowSet . Кроме того, любые слушатели событий, зарегистрированные с исходным объектом RowSet , не должны иметь область действия над новыми копиями RowSet. Кроме того, любые ограничения, установленные ограничениями, должны сохраняться.- Возвращает:
- новый объект
RowSet, являющийся глубокой копией этого объектаCachedRowSetи полностью независимый от этого объектаCachedRowSet - Исключения:
-
SQLException- если произошла ошибка при генерации копии этого объектаCachedRowSet - См. также:
createCopySchema
CachedRowSet createCopySchema() throws SQLException
CachedRowSet, являющийся пустой копией этого объекта CachedRowSet. Копия не должна содержать никаких данных, а только представлять табличную структуру исходного объекта CachedRowSet. Кроме того, ограничения первичного или внешнего ключа, установленные в исходном объекте CachedRowSet, должны быть одинаково применены к новому пустому объекту CachedRowSet. В отличие от объекта RowSet, созданного вызовом метода createShared, изменения, внесённые в копию этого объекта CachedRowSet с помощью метода createCopySchema, не должны быть видны исходному объекту. Приложения могут сформировать объект WebRowSet из объекта CachedRowSet, возвращённого этим методом, чтобы экспортировать определение схемы RowSet в XML для дальнейшего использования.
- Возвращает:
- Пустую копию этого объекта
CachedRowSet - Бросает:
-
SQLException- если произошла ошибка при клонировании структуры этого объектаCachedRowSet - См. также:
createCopyNoConstraints
CachedRowSet createCopyNoConstraints() throws SQLException
CachedRowSet, который является глубокой копией данных этого объекта CachedRowSet, но независим от него. В отличие от объекта RowSet, созданного вызовом метода createShared, изменения, внесённые в копию этого объекта CachedRowSet, не должны быть видны исходному объекту. Также любые обработчики событий, зарегистрированные с этим объектом CachedRowSet, не должны иметь области действия над новым объектом RowSet. Кроме того, любые ограничения, установленные для этого объекта CachedRowSet, не должны поддерживаться в копии.- Возвращает:
- новый объект
CachedRowSet, который является глубокой копией этого объектаCachedRowSetи полностью независим от этого объектаCachedRowSet - Бросает:
-
SQLException- если произошла ошибка при создании копии этого объектаCachedRowSet - См. также:
getRowSetWarnings
RowSetWarning getRowSetWarnings() throws SQLException
RowSet. Последующие предупреждения для этого объекта RowSet будут привязаны к объекту RowSetWarning, который возвращает этот метод. Цепочка предупреждений автоматически очищается каждый раз при чтении новой строки. Этот метод не может быть вызван на объекте RowSet, который был закрыт; при этом будет брошено исключение SQLException.- Возвращает:
- RowSetWarning первый объект
RowSetWarningили null, если их нет - Бросает:
-
SQLException- если этот метод вызван на закрытом RowSet - См. также:
getShowDeleted
boolean getShowDeleted() throws SQLException
boolean, удалённые строки отображаются вместе с текущими строками. Если возвращается false, строки не отображаются с набором текущих строк. Значение по умолчанию равно false. Стандартные реализации rowset могут ограничивать это поведение из-за соображений безопасности или для лучшей адаптации к определённым сценариям развертывания. Это оставлено на усмотрение реализации и не является стандартным поведением.
Примечание: Разрешение удалённых строк оставаться видимыми усложняет поведение некоторых стандартных методов JDBC RowSet реализаций. Однако большинство пользователей rowset могут просто проигнорировать эту дополнительную деталь, так как только очень специализированные приложения, скорее всего, захотят воспользоваться этой функцией.
- Возвращает:
-
trueесли удалённые строки видны;falseв противном случае - Бросает:
-
SQLException- если реализация rowset не может определить, видны ли строки, помеченные для удаления - См. также:
setShowDeleted
void setShowDeleted(boolean b) throws SQLException
showDeleted в заданное значение boolean, которое определяет, отображаются ли строки, помеченные для удаления, в наборе текущих строк. Если значение установлено в true, удалённые строки немедленно отображаются вместе с набором текущих строк. Если значение установлено в false, удалённые строки становятся невидимыми в наборе текущих строк. Стандартные реализации rowset могут ограничивать это поведение из-за соображений безопасности или для лучшей адаптации к определённым сценариям развертывания. Это оставлено на усмотрение реализации и не является стандартным поведением.
- Параметры:
-
b-trueесли удалённые строки должны отображаться;falseв противном случае - Бросает:
-
SQLException- если реализация rowset не может сбросить значение отображения удалённых строк - См. также:
commit
void commit() throws SQLException
CachedRowSet содержит объект Connection из свойств ResultSet или JDBC, переданных в его конструкторы. Этот метод оборачивает метод Connection commit, чтобы обеспечить гибкую поддержку автоматического подтверждения или не автоматического подтверждения транзакционного контроля. Делает все изменения, которые выполняются методом acceptChanges() с момента предыдущего подтверждения/отмены, постоянными. Этот метод следует использовать только при отключённом автоматическом подтверждении.
- Бросает:
-
SQLException- если произошла ошибка доступа к базе данных или этот объект Connection в этом объектеCachedRowSetнаходится в режиме автоматического подтверждения - См. также:
rollback
void rollback() throws SQLException
CachedRowSet содержит объект Connection из исходных свойств ResultSet или JDBC, переданных в него. Отменяет все изменения, внесённые в текущей транзакции. Этот метод следует использовать только при отключённом автоматическом подтверждении.
- Бросает:
-
SQLException- если произошла ошибка доступа к базе данных или этот объект Connection в этом объектеCachedRowSetнаходится в режиме автоматического подтверждения.
rollback
void rollback(Savepoint s) throws SQLException
CachedRowSet содержит объект SyncProvider из исходных свойств ResultSet или JDBC, переданных в него. Отменяет все изменения, внесённые в текущей транзакции, до последней метки транзакции Savepoint. Этот метод следует использовать только при отключённом автоматическом подтверждении.
- Параметры:
-
s- Метка транзакцииSavepoint - Бросает:
-
SQLException- если произошла ошибка доступа к базе данных или этот объект Connection в этом объектеCachedRowSetнаходится в режиме автоматического подтверждения.
rowSetPopulated
void rowSetPopulated(RowSetEvent event, int numRows) throws SQLException
numRows гарантирует, что это событие будет срабатывать только через numRow.- Параметры:
-
event- объектRowSetEvent, содержащий объектRowSet, являющийся источником событий -
numRows- интервал строк при заполнении, через который должно срабатывать событиеCachedRowSetpopulated; значение по умолчанию равно нулю; не может быть меньше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.
- Parameters:
-
startRow- позиция вResultSet, с которой следует начать заполнение записей в этомCachedRowSet -
rs- объектResultSet, содержащий данные для чтения в этот объектCachedRowSet - Throws:
-
SQLException- если предоставлен нулевой объектResultSetили этот объектCachedRowSetне может получить связанный объектResultSetMetaData - See Also:
setPageSize
void setPageSize(int size) throws SQLException
CachedRowSet. Объект CachedRowSet может быть настроен на заполнение себя страницами записей размером в пакет. При вызове методов populate() или execute(), CachedRowSet извлекает дополнительную страницу в соответствии с исходным SQL-запросом, используемым для заполнения RowSet.- Parameters:
-
size- размер страницы дляCachedRowSet - Throws:
-
SQLException- если при установке размера страницыCachedRowSetпроизошла ошибка или размер страницы меньше 0.
getPageSize
int getPageSize()
CachedRowSet- Returns:
- размер страницы
int
nextPage
boolean nextPage() throws SQLException
CachedRowSet. Это заставляет реализацию CachedRowSet извлечь следующие строки размера страницы и заполнить RowSet, если оставшиеся строки остаются в рамках исходного SQL-запроса, используемого для заполнения RowSet.- Returns:
- true, если существуют другие страницы; false, если это последняя страница
- Throws:
-
SQLException- если при извлечении следующей страницы произошла ошибка или если этот метод вызывается преждевременно до populate или execute.
previousPage
boolean previousPage() throws SQLException
CachedRowSet. Это заставляет реализацию CachedRowSet извлечь предыдущие строки размера страницы и заполнить RowSet. Количество строк, возвращаемых на предыдущей странице, всегда должно оставаться в рамках исходного SQL-запроса, используемого для заполнения RowSet.- Returns:
- true, если предыдущая страница успешно извлечена; false, если это первая страница.
- Throws:
-
SQLException- если при извлечении предыдущей страницы произошла ошибка или если этот метод вызывается преждевременно до populate или execute.
© 1993, 2021, 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/17/docs/api/java.sql.rowset/javax/sql/rowset/CachedRowSet.html