Интерфейс 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 с теми же данными. Поэтому он особенно подходит для отправки данных тонкому клиенту, например PDA, где использование драйвера JDBC нецелесообразно из-за ограничений ресурсов или соображений безопасности. Таким образом, объект CachedRowSet позволяет «получать строки», не реализуя весь API JDBC.
7.0 Прокрутка и обновление
Ещё одно важное применение объектовCachedRowSet — обеспечение прокрутки и обновления для объектов ResultSet, которые сами по себе не поддерживают эти возможности. Иными словами, объект CachedRowSet можно использовать для расширения возможностей драйвера с поддержкой технологии JDBC (далее — «драйвер JDBC»), если СУБД не обеспечивает полноценную поддержку прокрутки и обновления. Чтобы обеспечить прокрутку и обновление для непрокручиваемого набора ResultSet, доступного только для чтения, программисту достаточно создать объект CachedRowSet и заполнить его данными этого объекта ResultSet. Это показано в следующем фрагменте кода, где stmt — объект Statement.
ResultSet rs = stmt.executeQuery("SELECT * FROM EMPLOYEES");
CachedRowSetImpl crs = new CachedRowSetImpl();
crs.populate(rs);
Теперь объект crs содержит данные из таблицы EMPLOYEES, как и объект rs. Разница в том, что курсор объекта crs можно перемещать вперёд, назад или к определённой строке, даже если курсор объекта rs можно перемещать только вперёд. Кроме того, объект crs поддерживает обновление, даже если объект rs его не поддерживает, поскольку по умолчанию объект CachedRowSet поддерживает и прокрутку, и обновление.
Итак, объект CachedRowSet можно представить как отключённый набор строк, кэшируемый вне источника данных. Будучи компактным и поддерживая сериализацию, его можно без труда передать по сети; он хорошо подходит для отправки данных тонкому клиенту. Однако у объекта CachedRowSet есть ограничение: его размер ограничен объёмом данных, который он может одновременно хранить в памяти.
8.0 Универсальный доступ к данным
Ещё одно преимущество классаCachedRowSet заключается в том, что он позволяет получать и хранить данные из источников, отличных от реляционной базы данных. Средство чтения набора строк можно реализовать для чтения данных из любого табличного источника и заполнения ими набора строк, включая электронные таблицы и плоские файлы. Поскольку объект CachedRowSet и его метаданные можно создать с нуля, компонент, выполняющий роль фабрики наборов строк, может использовать эту возможность для создания набора строк с данными из источников, не использующих SQL. Тем не менее предполагается, что чаще всего объекты CachedRowSet будут содержать данные, полученные из базы данных SQL с помощью API JDBC. 9.0 Настройка свойств
Все наборы строк хранят набор свойств, которые обычно задаются с помощью инструмента. Количество и типы свойств набора строк зависят от его назначения и способа получения данных. Например, наборы строк, получающие данные из объектаResultSet, должны задавать свойства, необходимые для подключения к базе данных. Если набор строк использует для подключения механизм DriverManager, ему необходимо задать свойство URL JDBC, указывающее соответствующий драйвер, а также свойства с именем пользователя и паролем. Если же для подключения набор строк использует объект DataSource, что является предпочтительным способом, задавать свойство URL JDBC не нужно. Вместо этого необходимо задать свойства с логическим именем источника данных, именем пользователя и паролем. ПРИМЕЧАНИЕ: Чтобы использовать объект DataSource для подключения, объект DataSource должен быть зарегистрирован в службе именования, использующей API Java Naming and Directory Interface (JNDI). Обычно эту регистрацию выполняет системный администратор.
Чтобы заполнить набор строк данными из базы данных, необходимо задать свойство команды. Это свойство представляет собой запрос — объект PreparedStatement, который позволяет использовать в запросе заполнители параметров, задаваемые во время выполнения, а не на этапе проектирования. Для задания значений этих параметров-заполнителей набор строк предоставляет методы установки значений для каждого типа данных, подобные методам установки, предусмотренным интерфейсом PreparedStatement.
В следующем фрагменте кода показано, как можно задать свойство команды объекта CachedRowSet crs. Обратите внимание: если для задания свойств используется инструмент, он будет применять именно этот код.
crs.setCommand("SELECT FIRST_NAME, LAST_NAME, ADDRESS FROM CUSTOMERS " +
"WHERE CREDIT_LIMIT > ? AND REGION = ?");
Значения, которые будут использоваться для задания параметров-заполнителей команды, содержатся в поле params объекта RowSet, которое является объектом Vector. Класс CachedRowSet предоставляет набор методов установки для задания элементов поля params. В следующем фрагменте кода показано, как задать два параметра запроса из предыдущего примера.
crs.setInt(1, 5000); crs.setString(2, "West");
Теперь поле params содержит два элемента, каждый из которых представляет собой массив из двух элементов. Первый элемент — номер параметра, второй — задаваемое значение. В данном случае первый элемент params — это 1, 5000, а второй — 2, "West". Когда приложение вызывает метод execute, тот, в свою очередь, вызывает средство чтения этого объекта RowSet, которое затем вызывает свой метод readData. В рамках своей реализации readData получает значения из params и использует их для задания параметров-заполнителей команды. В следующем фрагменте кода показано, как средство чтения выполняет эту операцию после получения объекта Connection con.
PreparedStatement pstmt = con.prepareStatement(crs.getCommand());
reader.decodeParams();
// decodeParams figures out which setter methods to use and does something
// like the following:
// for (i = 0; i < params.length; i++) {
// pstmt.setObject(i + 1, params[i]);
// }
На этом этапе команда для crs представляет собой запрос "SELECT
FIRST_NAME, LAST_NAME, ADDRESS FROM CUSTOMERS WHERE CREDIT_LIMIT > 5000
AND REGION = "West". После того как метод readData выполнит эту команду следующей строкой кода, он получит данные из rs, которыми заполнит crs.
ResultSet rs = pstmt.executeQuery();
Предыдущие фрагменты кода дают представление о том, что происходит за кулисами; в приложении они не встречаются, поскольку приложение не вызывает такие методы, как readData и decodeParams. Напротив, в следующем фрагменте кода показано, что может делать приложение. Оно задаёт команду набора строк, задаёт параметры команды и выполняет её. Просто вызвав метод execute, объект crs заполняет себя запрошенными данными из таблицы CUSTOMERS.
crs.setCommand("SELECT FIRST_NAME, LAST_NAME, ADDRESS FROM CUSTOMERS" +
"WHERE CREDIT_LIMIT > ? AND REGION = ?");
crs.setInt(1, 5000);
crs.setString(2, "West");
crs.execute();
10.0 Постраничная выборка данных
Поскольку объектCachedRowSet хранит данные в памяти, объём данных, который он может одновременно содержать, определяется доступным объёмом памяти. Чтобы обойти это ограничение, объект CachedRowSet может получать данные из объекта ResultSet порциями, называемыми страницами. Чтобы воспользоваться этим механизмом, приложение задаёт количество строк на странице с помощью метода setPageSize. Иными словами, если размер страницы равен пяти, за один раз из источника данных будет извлекаться порция из пяти строк. Приложение также может дополнительно задать максимальное количество строк, извлекаемых за один раз. Если максимальное количество строк равно нулю или не задано, количество строк, извлекаемых за один раз, не ограничено. После задания свойств объект CachedRowSet необходимо заполнить данными с помощью метода populate или execute. В следующих строках кода показано использование метода populate. Обратите внимание: эта версия метода принимает два параметра — дескриптор ResultSet и номер строки объекта ResultSet, с которой следует начать извлечение строк.
CachedRowSet crs = new CachedRowSetImpl();
crs.setMaxRows(20);
crs.setPageSize(4);
crs.populate(rsHandle, 10);
После выполнения этого кода объект crs будет заполнен четырьмя строками из rsHandle, начиная с десятой строки. В следующем фрагменте кода показано заполнение объекта CachedRowSet с помощью метода execute, который может принимать или не принимать объект Connection в качестве параметра. В этом примере методу execute передаётся объект Connection conHandle.
Обратите внимание на два отличия следующего фрагмента кода от предыдущего. Во-первых, метод setMaxRows не вызывается, поэтому максимальное количество строк для crs не задаётся. (Помните, что crs всё равно ограничен объёмом данных, который может хранить в памяти.) Во-вторых, методу execute нельзя передать номер строки объекта ResultSet, с которой следует начать извлечение строк. Этот метод всегда начинает с первой строки.
CachedRowSet crs = new CachedRowSetImpl();
crs.setPageSize(5);
crs.execute(conHandle);
После выполнения этого кода объект crs будет содержать пять строк данных из объекта ResultSet, полученного в результате выполнения команды для crs. Средство записи объекта crs использует conHandle для подключения к источнику данных и выполнения команды для crs. Затем приложение может работать с данными в crs так же, как с данными любого другого объекта CachedRowSet. Чтобы получить следующую страницу (порцию данных), приложение вызывает метод nextPage. Этот метод создаёт новый объект CachedRowSet и заполняет его следующей страницей данных. Например, предположим, что команда объекта CachedRowSet возвращает объект ResultSet rs с 1000 строками данных. Если размер страницы задан равным 100, первый вызов метода nextPage создаст объект CachedRowSet, содержащий первые 100 строк из rs. После того как приложение выполнит необходимые операции с данными этих первых 100 строк, оно может снова вызвать метод nextPage, чтобы создать другой объект CachedRowSet со следующими 100 строками из rs. Данные первого объекта CachedRowSet больше не будут храниться в памяти, поскольку их заменят данные второго объекта CachedRowSet. После десятого вызова метода nextPage десятый объект CachedRowSet будет содержать последние 100 строк данных из rs, хранящиеся в памяти. В каждый момент времени в памяти хранятся данные только одного объекта CachedRowSet.
Метод nextPage возвращает true, пока текущая страница не является последней, и false, когда страниц больше нет. Поэтому его можно использовать в цикле while для получения всех страниц, как показано в следующих строках кода.
CachedRowSet crs = CachedRowSetImpl();
crs.setPageSize(100);
crs.execute(conHandle);
while(crs.nextPage()) {
while(crs.next()) {
. . . // operate on chunks (of 100 rows each) in crs,
// row by row
}
}
После выполнения этого фрагмента кода приложение просмотрит все 1000 строк, но одновременно в памяти будет находиться не более 100 строк. Интерфейс CachedRowSet также определяет метод previousPage. Подобно тому как метод nextPage аналогичен методу ResultSet интерфейса next, метод previousPage аналогичен методу ResultSet интерфейса previous. Как и метод nextPage, метод previousPage создаёт объект CachedRowSet, содержащий количество строк, равное заданному размеру страницы. Например, метод previousPage можно использовать в цикле while в конце предыдущего фрагмента кода, чтобы перемещаться по страницам от последней к первой. Метод previousPage также похож на nextPage тем, что его можно использовать в цикле while, однако он возвращает true, пока перед текущей страницей есть ещё одна, и false, когда впереди больше нет страниц.
Если установить курсор после последней строки каждой страницы, как показано в следующем фрагменте кода, метод previous будет перемещать курсор от последней строки к первой на каждой странице. Можно также установить курсор перед первой строкой каждой страницы, а затем использовать метод next в цикле while, чтобы перемещаться по каждой странице от первой строки к последней.
Следующий фрагмент кода предполагает продолжение предыдущего: курсор десятого объекта CachedRowSet находится на последней строке. Код перемещает курсор за последнюю строку, чтобы первый вызов метода previous вернул его на последнюю строку. Пройдя все строки последней страницы (объекта CachedRowSet crs), код входит в цикл while, чтобы перейти к девятой странице, пройти строки в обратном порядке, перейти к восьмой странице, снова пройти строки в обратном порядке и так далее, до первой строки первой страницы.
crs.afterLast();
while(crs.previous()) {
. . . // navigate through the rows, last to first
{
while(crs.previousPage()) {
crs.afterLast();
while(crs.previous()) {
. . . // go from the last row to the first row of each page
}
}
- С момента выпуска:
- 1.5
Краткое описание полей
| Модификатор и тип | Поле | Описание |
|---|---|---|
static final boolean |
COMMIT_ON_ACCEPT_CHANGES |
Устарело. Поскольку это поле является final (оно входит в интерфейс), его значение нельзя изменить. |
Поля, объявленные в интерфейсе ResultSet
CLOSE_CURSORS_AT_COMMIT, CONCUR_READ_ONLY, CONCUR_UPDATABLE, FETCH_FORWARD, FETCH_REVERSE, FETCH_UNKNOWN, HOLD_CURSORS_OVER_COMMIT, TYPE_FORWARD_ONLY, TYPE_SCROLL_INSENSITIVE, TYPE_SCROLL_SENSITIVE
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
void |
acceptChanges() |
Передает источнику данных изменения строк, внесенные в этот объект CachedRowSet: обновление, вставку и удаление. |
void |
acceptChanges |
Передает все изменения строк — обновление, вставку и удаление — источнику данных, лежащему в основе этого объекта CachedRowSet, используя указанный объект Connection для установления соединения с источником данных. |
boolean |
columnUpdated |
Указывает, было ли обновлено указанное значение столбца в текущей строке этого объекта CachedRowSet. |
boolean |
columnUpdated |
Указывает, было ли обновлено указанное значение столбца в текущей строке этого объекта CachedRowSet. |
void |
commit() |
Объект CachedRowSet содержит в своем SyncProvider объект Connection из ResultSet или свойства JDBC, переданные его конструкторам. |
CachedRowSet |
createCopy() |
Создает объект RowSet, являющийся полной копией данных этого объекта CachedRowSet. |
CachedRowSet |
createCopyNoConstraints() |
Создает объект CachedRowSet, содержащий полную копию данных этого объекта CachedRowSet, но независимый от него. |
CachedRowSet |
createCopySchema() |
Создает пустую копию этого объекта CachedRowSet типа CachedRowSet. |
RowSet |
createShared() |
Возвращает новый объект RowSet, использующий те же данные, что и этот объект CachedRowSet. |
void |
execute |
Заполняет этот объект 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() |
Объект CachedRowSet содержит в своем SyncProvider объект Connection из исходного ResultSet или свойства JDBC, переданные ему. |
void |
rollback |
Объект CachedRowSet содержит в своем SyncProvider объект 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() |
Немедленно отменяет последнюю операцию обновления, если строка была изменена. |
Методы, объявленные в интерфейсе Joinable
getMatchColumnIndexes, getMatchColumnNames, setMatchColumn, setMatchColumn, setMatchColumn, setMatchColumn, unsetMatchColumn, unsetMatchColumn, unsetMatchColumn, unsetMatchColumn
Методы, объявленные в интерфейсе ResultSet
absolute, afterLast, beforeFirst, cancelRowUpdates, clearWarnings, close, deleteRow, findColumn, first, getArray, getArray, getAsciiStream, getAsciiStream, getBigDecimal, getBigDecimal, getBigDecimal, getBigDecimal, getBinaryStream, getBinaryStream, getBlob, getBlob, getBoolean, getBoolean, getByte, getByte, getBytes, getBytes, getCharacterStream, getCharacterStream, getClob, getClob, getConcurrency, getCursorName, getDate, getDate, getDate, getDate, getDouble, getDouble, getFetchDirection, getFetchSize, getFloat, getFloat, getHoldability, getInt, getInt, getLong, getLong, getMetaData, getNCharacterStream, getNCharacterStream, getNClob, getNClob, getNString, getNString, getObject, getObject, getObject, getObject, getObject, getObject, getRef, getRef, getRow, getRowId, getRowId, getShort, getShort, getSQLXML, getSQLXML, getStatement, getString, getString, getTime, getTime, getTime, getTime, getTimestamp, getTimestamp, getTimestamp, getTimestamp, getType, getUnicodeStream, getUnicodeStream, getURL, getURL, getWarnings, insertRow, isAfterLast, isBeforeFirst, isClosed, isFirst, isLast, last, moveToCurrentRow, moveToInsertRow, next, previous, refreshRow, relative, rowDeleted, rowInserted, rowUpdated, setFetchDirection, setFetchSize, updateArray, updateArray, updateAsciiStream, updateAsciiStream, updateAsciiStream, updateAsciiStream, updateAsciiStream, updateAsciiStream, updateBigDecimal, updateBigDecimal, updateBinaryStream, updateBinaryStream, updateBinaryStream, updateBinaryStream, updateBinaryStream, updateBinaryStream, updateBlob, updateBlob, updateBlob, updateBlob, updateBlob, updateBlob, updateBoolean, updateBoolean, updateByte, updateByte, updateBytes, updateBytes, updateCharacterStream, updateCharacterStream, updateCharacterStream, updateCharacterStream, updateCharacterStream, updateCharacterStream, updateClob, updateClob, updateClob, updateClob, updateClob, updateClob, updateDate, updateDate, updateDouble, updateDouble, updateFloat, updateFloat, updateInt, updateInt, updateLong, updateLong, updateNCharacterStream, updateNCharacterStream, updateNCharacterStream, updateNCharacterStream, updateNClob, updateNClob, updateNClob, updateNClob, updateNClob, updateNClob, updateNString, updateNString, updateNull, updateNull, updateObject, updateObject, updateObject, updateObject, updateObject, updateObject, updateObject, updateObject, updateRef, updateRef, updateRow, updateRowId, updateRowId, updateShort, updateShort, updateSQLXML, updateSQLXML, updateString, updateString, updateTime, updateTime, updateTimestamp, updateTimestamp, wasNull
Методы, объявленные в интерфейсе RowSet
addRowSetListener, clearParameters, execute, getCommand, getDataSourceName, getEscapeProcessing, getMaxFieldSize, getMaxRows, getPassword, getQueryTimeout, getTransactionIsolation, getTypeMap, getUrl, getUsername, isReadOnly, removeRowSetListener, setArray, setAsciiStream, setAsciiStream, setAsciiStream, setAsciiStream, setBigDecimal, setBigDecimal, setBinaryStream, setBinaryStream, setBinaryStream, setBinaryStream, setBlob, setBlob, setBlob, setBlob, setBlob, setBlob, setBoolean, setBoolean, setByte, setByte, setBytes, setBytes, setCharacterStream, setCharacterStream, setCharacterStream, setCharacterStream, setClob, setClob, setClob, setClob, setClob, setClob, setCommand, setConcurrency, setDataSourceName, setDate, setDate, setDate, setDate, setDouble, setDouble, setEscapeProcessing, setFloat, setFloat, setInt, setInt, setLong, setLong, setMaxFieldSize, setMaxRows, setNCharacterStream, setNCharacterStream, setNCharacterStream, setNCharacterStream, setNClob, setNClob, setNClob, setNClob, setNClob, setNClob, setNString, setNString, setNull, setNull, setNull, setNull, setObject, setObject, setObject, setObject, setObject, setObject, setPassword, setQueryTimeout, setReadOnly, setRef, setRowId, setRowId, setShort, setShort, setSQLXML, setSQLXML, setString, setString, setTime, setTime, setTime, setTime, setTimestamp, setTimestamp, setTimestamp, setTimestamp, setTransactionIsolation, setType, setTypeMap, setUrl, setURL, setUsername
Методы, объявленные в интерфейсе Wrapper
isWrapperFor, unwrap
Подробное описание полей
COMMIT_ON_ACCEPT_CHANGES
@Deprecated static final boolean COMMIT_ON_ACCEPT_CHANGES
CachedRowSet фиксировать изменения при вызове acceptChanges() его SyncProvider. Если задано значение false, изменения не будут зафиксированы, пока не будет вызван один из транзакционных методов интерфейса CachedRowSet.- См. также:
Подробное описание методов
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
void execute(Connection conn) throws SQLException
CachedRowSet данными, используя указанное подключение для получения результирующего набора, из которого будут считываться данные. Этот метод должен закрывать все создаваемые им подключения к базе данных, чтобы гарантировать, что этот объект CachedRowSet отключен, кроме случаев чтения данных из источника данных или записи данных в него. Для установки подключения к источнику данных средство чтения этого объекта CachedRowSet использует conn, чтобы выполнить команду набора строк и считать данные из результирующего объекта ResultSet в этот объект CachedRowSet. Этот метод также закрывает conn после заполнения объекта CachedRowSet.
Если этот метод вызывается для уже заполненной реализации, содержимое и метаданные сбрасываются. Кроме того, если этот метод вызван до вызова метода acceptChanges для фиксации ожидающих обновлений, эти обновления теряются.
- Параметры:
-
conn— стандартный объект JDBCConnectionс допустимыми свойствами - Исключения:
-
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. Если это так, все обновления при синхронизации фиксируются в источнике данных. В противном случае приложение должно явно вызвать соответствующий метод 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. Если это так, все обновления при синхронизации фиксируются в источнике данных. В противном случае приложение должно явно вызвать соответствующий метод commit или rollback.
- Параметры:
-
con— стандартный объект JDBCConnection - Исключения:
-
SyncProviderException— если средство записи базового поставщика синхронизации не может записать обновления обратно в источник данных - См. также:
restoreOriginal
void restoreOriginal() throws SQLException
CachedRowSet, то есть значение до последнего набора изменений. Если в набор строк не вносились изменения или был внесен только один набор изменений, исходным значением является значение, которым был заполнен этот объект CachedRowSet; в противном случае исходное значение — это значение непосредственно перед текущим. При вызове этого метода реализация CachedRowSet должна обеспечить замену всех обновлений, вставок и удалений текущего экземпляра набора строк предыдущими значениями. Кроме того, курсор следует переместить к первой строке и сгенерировать событие rowSetChanged, чтобы уведомить всех зарегистрированных слушателей.
- Исключения:
-
SQLException— если при откате текущего значения этого объектаCachedRowSetк предыдущему значению произошла ошибка - См. также:
release
void release() throws SQLException
CachedRowSet и отправляет событие rowSetChanged всем зарегистрированным слушателям. Все ожидающие обновления отбрасываются, и после вызова этого метода набор строк не содержит строк. Взаимодействие с базовым источником данных не выполняется, а любые данные набора строк, метаданные и обновления содержимого должны быть невосстановимы. Этот объект CachedRowSet должен оставаться заблокированным до полной очистки его содержимого и связанных обновлений, предотвращая тем самым «грязное» чтение другими компонентами, имеющими ссылку на этот объект RowSet. Кроме того, содержимое нельзя освобождать, пока все компоненты, читающие этот объект CachedRowSet, не завершат чтение. После отправки события rowSetChanged этот объект CachedRowSet должен вернуться к нормальному режиму работы.
Метаданные, включая свойства JDBC и свойства Synchronization SPI, сохраняются для дальнейшего использования. Важно, чтобы такие свойства, как свойство command, соответствовали исходному источнику данных, из которого первоначально был создан этот объект CachedRowSet.
Этот метод очищает набор строк, в отличие от метода close, который помечает весь набор строк как подлежащий восстановлению, чтобы сборщик мусора мог освободить ресурсы набора строк в виртуальной машине Java.
- Исключения:
-
SQLException— если при очистке содержимого этого объектаCachedRowSetпроизошла ошибка - См. также:
undoDelete
void undoDelete() throws SQLException
Кроме того, можно отменить несколько удалений строк, изменяя положение курсора с помощью любого метода управления положением курсора, например:
-
CachedRowSet.absolute -
CachedRowSet.first -
CachedRowSet.last
- Исключения:
-
SQLException— если (1) текущая строка не была удалена или (2) курсор находится на строке вставки, перед первой строкой или после последней строки - См. также:
undoInsert
void undoInsert() throws SQLException
CachedRowSet, если она была вставлена, и уведомляет слушателей об изменении строки. Этот метод можно вызывать в любое время существования набора строк; если текущая строка не подпадает под ограничения для исключений (см. ниже), он отменяет вставку текущей строки. Кроме того, можно отменить несколько вставок строк, изменяя положение курсора с помощью любого метода управления положением курсора, например:
-
CachedRowSet.absolute -
CachedRowSet.first -
CachedRowSet.last
- Исключения:
-
SQLException— если (1) текущая строка не была вставлена или (2) курсор находится перед первой строкой, после последней строки или на строке вставки - См. также:
undoUpdate
void undoUpdate() throws SQLException
acceptChanges) или заполнением. Этот метод также можно вызывать при обновлении строки вставки. Метод undoUpdate можно вызывать в любое время существования набора строк; однако после синхронизации он не действует до тех пор, пока данные набора строк не будут изменены.
- Исключения:
-
SQLException— если курсор находится перед первой или после последней строки этого объектаCachedRowSet - См. также:
columnUpdated
boolean columnUpdated(int idx) throws SQLException
CachedRowSet.- Параметры:
-
idx— значениеint, определяющее столбец, для которого проверяется наличие обновлений - Возвращает:
-
true, если заданный столбец был явно обновлен; в противном случае —false - Исключения:
-
SQLException— если курсор находится на строке вставки, перед первой строкой или после последней строки - См. также:
columnUpdated
boolean columnUpdated(String columnName) throws SQLException
CachedRowSet.- Параметры:
-
columnName— объектString, задающий имя столбца, для которого проверяется наличие обновлений - Возвращает:
-
true, если столбец был явно обновлен; в противном случае —false - Исключения:
-
SQLException— если курсор находится на строке вставки, перед первой строкой или после последней строки - См. также:
toCollection
Collection<?> toCollection() throws SQLException
CachedRowSet в объект Collection, содержащий все данные этого объекта CachedRowSet. Из-за абстрактной природы платформы Collection реализации могут по-разному представлять этот объект Collection. Каждая строка должна быть полностью представлена либо в универсальной реализации Collection, либо в специализированной реализации Collection, например в объекте TreeMap или Vector. Значение столбца SQL-типа NULL должно представляться в языке программирования Java как null. Стандартная эталонная реализация интерфейса CachedRowSet использует объект TreeMap для набора строк, а значения каждой строки хранятся в объектах Vector. Предполагается, что большинство реализаций поступит так же.
Тип коллекции TreeMap гарантирует, что карта будет упорядочена по ключам по возрастанию согласно естественному порядку класса ключа. Каждый ключ ссылается на объект Vector, соответствующий одной строке объекта RowSet. Поэтому размер каждого объекта Vector должен точно совпадать с количеством столбцов в объекте RowSet. Ключ, используемый коллекцией TreeMap, определяется реализацией, которая может использовать уже заданный ключ, доступный во внутренней табличной структуре RowSet благодаря тому, что ключ уже задан либо в самом объекте RowSet, либо в базовых данных SQL.
- Возвращает:
- объект
Collection, содержащий значения каждой строки этого объектаCachedRowSet - Исключения:
-
SQLException— если при создании коллекции произошла ошибка - См. также:
toCollection
Collection<?> toCollection(int column) throws SQLException
CachedRowSet в объект Collection. Из-за абстрактной природы платформы Collection реализации могут по-разному представлять этот объект Collection. Каждое значение столбца должно быть полностью представлено либо в универсальной реализации Collection, либо в специализированной реализации Collection, например в объекте Vector. Значение столбца SQL-типа NULL должно представляться в языке программирования Java как null. Стандартная эталонная реализация использует объект Vector для хранения значений столбца; предполагается, что большинство реализаций поступит так же. Если используется объект Vector, его размер должен точно совпадать с количеством строк в этом объекте CachedRowSet.
- Параметры:
-
column— значениеint, указывающее столбец, значения которого должны быть представлены в объектеCollection - Возвращает:
- объект
Collection, содержащий значения указанного столбца этого объектаCachedRowSet - Исключения:
-
SQLException— если при создании коллекции произошла ошибка или указан недопустимый идентификатор столбца - См. также:
toCollection
Collection<?> toCollection(String column) throws SQLException
CachedRowSet в объект Collection. Из-за абстрактной природы платформы Collection реализации могут по-разному представлять этот объект Collection. Каждое значение столбца должно быть полностью представлено либо в универсальной реализации Collection, либо в специализированной реализации Collection, например в объекте Vector. Значение столбца SQL-типа NULL должно представляться в языке программирования Java как null. Стандартная эталонная реализация использует объект Vector для хранения значений столбца; предполагается, что большинство реализаций поступит так же. Если используется объект Vector, его размер должен точно совпадать с количеством строк в этом объекте CachedRowSet.
- Параметры:
-
column— объектString, задающий имя столбца, значения которого должны быть представлены в коллекции - Возвращает:
- объект
Collection, содержащий значения указанного столбца этого объектаCachedRowSet - Исключения:
-
SQLException— если при создании коллекции произошла ошибка или указан недопустимый идентификатор столбца - См. также:
getSyncProvider
SyncProvider getSyncProvider() throws SQLException
SyncProvider для этого объекта CachedRowSet. Внутри этот метод используется набором строк для запуска операций чтения или записи между набором строк и источником данных. Например, набору строк может потребоваться получить средство чтения набора строк (объект RowSetReader) из SyncProvider, чтобы заполнить набор строк.
RowSetReader rowsetReader = null;
SyncProvider provider =
SyncFactory.getInstance("javax.sql.rowset.provider.RIOptimisticProvider");
if (provider instanceof RIOptimisticProvider) {
rowsetReader = provider.getRowSetReader();
}
Если предположить, что rowsetReader — это закрытое доступное поле реализации набора строк, при вызове приложением метода execute он, в свою очередь, вызывает метод readData средства чтения для заполнения объекта RowSet.
rowsetReader.readData((RowSetInternal)this);
Кроме того, приложение может использовать объект SyncProvider, возвращенный этим методом, для вызова методов, предоставляющих сведения об объекте SyncProvider, включая информацию о поставщике, версии, идентификаторе поставщика, уровне синхронизации и установленных в данный момент блокировках.
- Возвращает:
- объект
SyncProvider, заданный при создании экземпляра набора строк, или поставщика по умолчанию, если он не был задан - Исключения:
-
SQLException— если при возврате объектаSyncProviderпроизошла ошибка - См. также:
setSyncProvider
void setSyncProvider(String provider) throws SQLException
CachedRowSet поставщика SyncProvider, указанного в качестве аргумента. Этот метод позволяет сбросить объект SyncProvider. Реализация CachedRowSet всегда должна создаваться с доступным механизмом SyncProvider, однако существуют случаи, когда сброс объекта SyncProvider желателен или необходим. Например, приложение может некоторое время использовать поставщика SyncProvider по умолчанию, а затем выбрать поставщика, который стал доступен позднее и лучше соответствует его потребностям.
Сброс объекта SyncProvider заставляет объект RowSet запросить новую реализацию SyncProvider у SyncFactory. В результате сбрасываются все предыдущие подключения и связи с исходным источником данных, что может существенно изменить поведение синхронизации отключенного набора строк.
- Параметры:
-
provider— объектString, задающий полное имя класса реализацииSyncProvider - Исключения:
-
SQLException— если при попытке сбросить реализациюSyncProviderпроизошла ошибка - См. также:
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
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
keyCols объекта CachedRowSet, используя указанный массив номеров столбцов, образующих ключ для однозначной идентификации строки в этом объекте 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, указывающее, отображаются ли в наборе текущих строк строки, помеченные для удаления. Если возвращается true, удаленные строки видны вместе с текущими строками. Если возвращается false, удаленные строки не отображаются в наборе текущих строк. Значение по умолчанию — false. Стандартные реализации набора строк могут ограничивать такое поведение из соображений безопасности или для лучшего соответствия определенным сценариям развертывания. Это определяется реализацией и не является стандартным поведением.
Примечание. Возможность отображения удаленных строк усложняет поведение некоторых стандартных методов реализаций JDBC RowSet. Однако большинство пользователей наборов строк могут не учитывать эту особенность, поскольку, вероятно, воспользоваться ею захотят только узкоспециализированные приложения.
- Возвращает:
-
true, если удаленные строки видны; в противном случае —false - Исключения:
-
SQLException— если реализация набора строк не может определить, отображаются ли строки, помеченные для удаления - См. также:
setShowDeleted
void setShowDeleted(boolean b) throws SQLException
showDeleted указанное значение boolean, определяющее, отображаются ли в наборе текущих строк строки, помеченные для удаления. Если задано значение true, удаленные строки сразу становятся видны в наборе текущих строк. Если задано значение false, удаленные строки скрываются из текущего набора строк. Стандартные реализации набора строк могут ограничивать такое поведение из соображений безопасности или для лучшего соответствия определенным сценариям развертывания. Это определяется реализацией и не является стандартным поведением.
- Параметры:
-
b—true, если удаленные строки следует отображать; в противном случае —false - Исключения:
-
SQLException— если реализация набора строк не может изменить настройку видимости удаленных строк - См. также:
commit
void commit() throws SQLException
SyncProvider каждого объекта CachedRowSet содержит объект Connection, полученный из ResultSet или свойств JDBC, переданных конструктору. Этот метод оборачивает метод фиксации Connection, обеспечивая поддержку гибкого управления транзакциями с автоматической фиксацией или без нее. Делает постоянными все изменения, выполненные методом acceptChanges() после предыдущей фиксации или отката. Этот метод следует использовать только при отключенном режиме автоматической фиксации.
- Исключения:
-
SQLException— если произошла ошибка доступа к базе данных или объект Connection внутри этогоCachedRowSetнаходится в режиме автоматической фиксации - См. также:
rollback
void rollback() throws SQLException
SyncProvider каждого объекта CachedRowSet содержит объект Connection, полученный из исходного ResultSet или свойств JDBC, переданных ему. Отменяет все изменения, внесенные в текущей транзакции. Этот метод следует использовать только при отключенном режиме автоматической фиксации.
- Исключения:
-
SQLException— если произошла ошибка доступа к базе данных или объект Connection внутри этогоCachedRowSetнаходится в режиме автоматической фиксации.
rollback
void rollback(Savepoint s) throws SQLException
SyncProvider каждого объекта CachedRowSet содержит объект Connection, полученный из исходного ResultSet или свойств JDBC, переданных ему. Отменяет все изменения, внесенные в текущей транзакции, до последней отметки транзакции Savepoint. Этот метод следует использовать только при отключенном режиме автоматической фиксации.
- Параметры:
-
s— отметка транзакцииSavepoint - Исключения:
-
SQLException— если произошла ошибка доступа к базе данных или объект Connection внутри этогоCachedRowSetнаходится в режиме автоматической фиксации.
rowSetPopulated
void rowSetPopulated(RowSetEvent event, int numRows) throws SQLException
numRows гарантирует, что это событие будет инициироваться только через каждые numRow. Источник события можно получить с помощью метода event.getSource.
- Параметры:
-
event— объектRowSetEvent, содержащий объектRowSet, являющийся источником событий -
numRows— при заполнении интервал количества строк, по достижении которого должно срабатывать событиеCachedRowSet; значение по умолчанию — ноль; значение не может быть меньшеfetchSizeили нуля - Исключения:
-
SQLException—numRows < 0 or numRows < getFetchSize()
populate
void populate(ResultSet rs, int startRow) throws SQLException
CachedRowSet данными из указанного объекта ResultSet. Этот метод связан с методом populate(ResultSet), но имеет дополнительный параметр, задающий начальную позицию объекта ResultSet, с которой следует заполнять экземпляр CachedRowSet. Этот метод можно использовать вместо метода execute, если приложение имеет подключение к открытому объекту ResultSet. Использование метода populate может быть эффективнее использования версии метода execute без параметров, поскольку при этом не открывается новое подключение и не выполняется повторно команда этого объекта CachedRowSet. Использование метода populate удобнее по сравнению с использованием версии метода execute, принимающей объект ResultSet.
- Параметры:
-
rs— объектResultSet, содержащий данные для чтения в этот объектCachedRowSet -
startRow— позиция в объектеResultSet, с которой следует начать заполнение записей в этом объектеCachedRowSet - Исключения:
-
SQLException— если передан объектResultSetсо значением null или этот объектCachedRowSetне может получить связанный объектResultSetMetaData - См. также:
setPageSize
void setPageSize(int size) throws SQLException
CachedRowSet. Объект CachedRowSet можно настроить для заполнения пакетами строк размером в одну страницу. При вызове populate() или execute() объект CachedRowSet извлекает следующую страницу в соответствии с исходным SQL-запросом, использованным для заполнения RowSet.- Параметры:
-
size— размер страницы объектаCachedRowSet - Исключения:
-
SQLException— если при задании размера страницы объектаCachedRowSetвозникает ошибка или размер страницы меньше 0.
getPageSize
int getPageSize()
CachedRowSet- Возвращает:
- размер страницы объекта
int
nextPage
boolean nextPage() throws SQLException
CachedRowSet. В результате реализация CachedRowSet извлекает строки следующей страницы и заполняет RowSet, если в рамках исходного SQL-запроса, использованного для заполнения RowSet, остались строки.- Возвращает:
- true, если имеются следующие страницы; false, если это последняя страница
- Исключения:
-
SQLException— если при извлечении следующей страницы возникает ошибка или если этот метод вызван преждевременно, до вызова populate или execute.
previousPage
boolean previousPage() throws SQLException
CachedRowSet. В результате реализация CachedRowSet извлекает строки предыдущей страницы и заполняет RowSet. Количество строк, возвращаемых на предыдущей странице, всегда должно оставаться в пределах исходного SQL-запроса, использованного для заполнения RowSet.- Возвращает:
- true, если предыдущая страница успешно получена; false, если это первая страница.
- Исключения:
-
SQLException— если при извлечении предыдущей страницы возникает ошибка или если этот метод вызван преждевременно, до вызова populate или execute.
© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/25/docs/api/java.sql.rowset/javax/sql/rowset/CachedRowSet.html