Spec-Zone .ru
спецификации, руководства, описания, API
|
A JdbcRowSet
объект является улучшенным ResultSet
объект. Это поддерживает соединение со своим источником данных, так же, как a ResultSet
объект делает. Большая разница - то, что у этого есть ряд свойств и механизма уведомления слушателя, которые делают это компонентом JavaBeans.
Одно из основного использования a JdbcRowSet
объект состоит в том, чтобы сделать a ResultSet
возразите с возможностью прокрутки и обновляемый, когда у этого иначе нет тех возможностей.
Этот раздел затрагивает следующие темы:
Можно создать a JdbcRowSet
объект различными способами:
ResultSet
объектConnection
объектRowSetFactory
, который создается из class RowSetProvider
Отметьте: Альтернативно, можно использовать конструктора от JdbcRowSet
реализация Вашего драйвера JDBC. Однако, реализации RowSet
интерфейс будет отличаться от ссылочной реализации. У этих реализаций будут различные имена и конструкторы. Например, Oracle реализация драйвера JDBC JdbcRowSet
интерфейс называют oracle.jdbc.rowset.OracleJDBCRowSet
.
Самый простой способ создать a JdbcRowSet
объект состоит в том, чтобы произвести a ResultSet
объект и передача это к JdbcRowSetImpl
конструктор. Выполнение этого не только создает a JdbcRowSet
возразите, но также и заполняет это с данными в ResultSet
объект.
Отметьте: ResultSet
объект, который передают к JdbcRowSetImpl
конструктор должен быть с возможностью прокрутки.
Как пример, следующий фрагмент кода использует Connection
объект con
создать a Statement
объект, stmt
, который тогда выполняет запрос. Запрос производит ResultSet
объект rs
, который передают конструктору, чтобы создать новое JdbcRowSet
объект, инициализированный с данными в rs
:
stmt = con.createStatement( ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); rs = stmt.executeQuery("select * from COFFEES"); jdbcRs = new JdbcRowSetImpl(rs);
A JdbcRowSet
объект создается с a ResultSet
объект служит оберткой для ResultSet
объект. Поскольку RowSet
объект rs
с возможностью прокрутки и обновляем, jdbcRs
также с возможностью прокрутки и обновляем. Если Вы выполнили метод createStatement
без любых параметров, rs
не было бы с возможностью прокрутки или обновляем, и ни один не будет jdbcRs
.
Первый оператор в следующем коде выбирает от JdbcRowSetSample
создает a JdbcRowSet
объект, который соединяется с базой данных с Connection
объект con
:
jdbcRs = new JdbcRowSetImpl(con); jdbcRs.setCommand("select * from COFFEES"); jdbcRs.execute();
Объект jdbcRs
не содержит данных, пока Вы не определяете SQL-оператор с методом setCommand
, тогда выполните метод execute
.
Объект jdbcRs
с возможностью прокрутки и обновляем; по умолчанию, JdbcRowSet
и все другой RowSet
объекты с возможностью прокрутки и обновляемы если иначе не определено. См. Значение по умолчанию Объекты JdbcRowSet для получения дополнительной информации о JdbcRowSet
свойства можно определить.
Первый оператор в следующей выборке кода создает пустое JdbcRowSet
объект.
public void createJdbcRowSet(String username, String password) { jdbcRs = new JdbcRowSetImpl(); jdbcRs.setCommand("select * from COFFEES"); jdbcRs.setUrl("jdbc:myDriver:myAttribute"); jdbcRs.setUsername(username); jdbcRs.setPassword(password); jdbcRs.execute(); // ... }
Объект jdbcRs
не содержит данных, пока Вы не определяете SQL-оператор с методом setCommand
, определите как JdbcResultSet
объект соединяет базу данных, и затем выполняет метод execute
.
Все ссылочные конструкторы реализации присваивают значения по умолчанию для свойств, перечисленных в Значении по умолчанию раздела Объекты JdbcRowSet.
С RowSet 1.1, который является частью Java SE 7 и позже, можно использовать экземпляр RowSetFactory
создать a JdbcRowSet
объект. Например, следующая выборка кода использует экземпляр RowSetFactory
интерфейс, чтобы создать JdbcRowSet
объект, jdbcRs
:
public void createJdbcRowSetWithRowSetFactory( String username, String password) throws SQLException { RowSetFactory myRowSetFactory = null; JdbcRowSet jdbcRs = null; ResultSet rs = null; Statement stmt = null; try { myRowSetFactory = RowSetProvider.newFactory(); jdbcRs = myRowSetFactory.createJdbcRowSet(); jdbcRs.setUrl("jdbc:myDriver:myAttribute"); jdbcRs.setUsername(username); jdbcRs.setPassword(password); jdbcRs.setCommand("select * from COFFEES"); jdbcRs.execute(); // ... } }
Следующий оператор создает RowSetProvider
объект myRowSetFactory
со значением по умолчанию RowSetFactory
реализация, com.sun.rowset.RowSetFactoryImpl
:
myRowSetFactory = RowSetProvider.newFactory();
Альтернативно, если у Вашего драйвера JDBC есть свое собственное RowSetFactory
реализация, можно определить это как параметр newFactory
метод.
Следующие операторы создают JdbcRowSet
объект jdbcRs
и сконфигурируйте его свойства соединения с базой данных:
jdbcRs = myRowSetFactory.createJdbcRowSet(); jdbcRs.setUrl("jdbc:myDriver:myAttribute"); jdbcRs.setUsername(username); jdbcRs.setPassword(password);
RowSetFactory
интерфейс содержит методы, чтобы создать различные типы RowSet
реализации, доступные в RowSet 1.1 и позже:
createCachedRowSet
createFilteredRowSet
createJdbcRowSet
createJoinRowSet
createWebRowSet
Когда Вы создаете a JdbcRowSet
объект с конструктором по умолчанию, новым JdbcRowSet
у объекта будут следующие свойства:
type
: ResultSet.TYPE_SCROLL_INSENSITIVE
(имеет курсор с возможностью прокрутки),concurrency
: ResultSet.CONCUR_UPDATABLE
(может быть обновлен),escapeProcessing
: true
(драйвер сделает обработку escape; когда обработка escape будет включена, драйвер отсканирует для любого синтаксиса escape и преобразует его в код, который определенная база данных понимает),maxRows
: 0
(никакой предел на числе строк)maxFieldSize
: 0
(никакой предел на числе байтов для значения столбца; применяет только к столбцам то хранилище BINARY
, VARBINARY
, LONGVARBINARY
, CHAR
, VARCHAR
, и LONGVARCHAR
значения)queryTimeout
: 0
(нет времени предел, как долго он берет, чтобы выполнить запрос),showDeleted
: false
(удаленные строки не видимы),transactionIsolation
: Connection.TRANSACTION_READ_COMMITTED
(чтения только данные, которые фиксировались),typeMap
: null
(карта типа связалась с a Connection
объект используется этим RowSet
объект null
)Главное, которое следует помнить от этого списка, является этим a JdbcRowSet
и все другой RowSet
объекты с возможностью прокрутки и обновляемы, если Вы не устанавливаете различные значения для тех свойств.
Объекты JdbcRowSet Значения по умолчанию раздела перечисляют свойства, которые устанавливаются по умолчанию когда новое JdbcRowSet
объект создается. Если Вы используете конструктора по умолчанию, следует установить некоторые дополнительные свойства прежде, чем можно будет заполнить свое новое JdbcRowSet
объект с данными.
Чтобы получить его данные, a JdbcRowSet
возразите первым потребностям соединиться с базой данных. Следующие четыре свойства содержат информацию, используемую в получении соединения с базой данных.
username
: имя пользователь предоставляет к базе данных как часть получения доступаpassword
: пароль базы данных пользователяurl
: URL JDBC для базы данных, с которой пользователь хочет соединитьсяdatasourceName
: имя, используемое, чтобы получить a DataSource
объект, который был зарегистрирован в JNDI именование службыТо, который из этих свойств Вы устанавливаете, зависит от того, как Вы собираетесь сделать соединение. Привилегированный путь состоит в том, чтобы использовать a DataSource
объект, но это, возможно, не практично для Вас, чтобы зарегистрировать a DataSource
объект с JNDI именование службы, которая обычно делается системным администратором. Поэтому, примеры кода все использование DriverManager
механизм, чтобы получить соединение, для которого Вы используете url
свойство а не datasourceName
свойство.
Другое свойство, которое следует установить, command
свойство. Это свойство является запросом, который определяет что данные JdbcRowSet
объект будет содержать. Например, следующая строка кодовых наборов command
свойство с запросом, который производит a ResultSet
объект, содержащий все данные в таблице COFFEES
:
jdbcRs.setCommand("select * from COFFEES");
После того, как Вы установили command
свойство и свойства, необходимые для того, чтобы сделать соединение, Вы готовы заполнить jdbcRs
объект с данными, вызывая execute
метод.
jdbcRs.execute();
execute
метод делает много вещей для Вас в фоновом режиме:
url
, username
, и password
свойства.command
свойство.ResultSet
объект в jdbcRs
объект.Вы обновляете, вставляете, и удаляете строку в a JdbcRowSet
возразите тому же самому способу, которым Вы обновляете, вставляете, и удаляете строку в обновляемом ResultSet
объект. Точно так же Вы перемещаетесь по a JdbcRowSet
возразите тому же самому способу, которым Вы перемещаетесь по с возможностью прокрутки ResultSet
объект.
Цепочка Перерыва на кофе кофеен, полученных, у другой цепочки кофеен и теперь есть унаследованная база данных, которая не поддерживает прокрутку или обновление набора результатов. Другими словами, любой ResultSet
у объекта, произведенного этой унаследованной базой данных, нет курсора с возможностью прокрутки, и данные в этом не могут быть изменены. Однако, создавая a JdbcRowSet
объект заполняется с данными от a ResultSet
объект, можно, в действительности, сделать ResultSet
возразите с возможностью прокрутки и обновляемый.
Как упомянуто ранее, a JdbcRowSet
объект по умолчанию с возможностью прокрутки и обновляем. Поскольку его содержание идентично тем в a ResultSet
объект, работающий на JdbcRowSet
объект эквивалентен работе на ResultSet
возразите себе. И потому что a JdbcRowSet
у объекта есть продолжающееся соединение с базой данных, изменения, которые это делает к ее собственным данным, также производятся в данных в базе данных.
Этот раздел затрагивает следующие темы:
A ResultSet
объект, который не с возможностью прокрутки, может использовать только next
метод, чтобы переместить его курсор вперед, и это может переместиться, курсор только передают от первой строки до последней строки. Значение по умолчанию JdbcRowSet
объект, однако, может использовать все методы перемещения курсора, определенные в ResultSet
интерфейс.
A JdbcRowSet
объект может вызвать метод next
, и это может также вызвать любой из другого ResultSet
методы перемещения курсора. Например, следующие строки кода перемещают курсор в четвертую строку в jdbcRs
возразите и затем назад против третьей строки:
jdbcRs.absolute(4); jdbcRs.previous();
Метод previous
походит на метод next
в этом это может использоваться в a while
цикл, чтобы пересечь все строки в порядке. Различие - то, что следует переместить курсор в позицию после последней строки, и previous
перемещает курсор к началу.
Вы обновляете данные в a JdbcRowSet
возразите тому же самому способу, которым Вы обновляете данные в a ResultSet
объект.
Предположите, что владелец Перерыва на кофе хочет повысить цену за фунт Кофе эспрессо. Если владелец знает, что Кофе эспрессо находится в третьей строке jdbcRs
объект, код для того, чтобы сделать это мог бы быть похожим на следующее:
jdbcRs.absolute(3); jdbcRs.updateFloat("PRICE", 10.99f); jdbcRs.updateRow();
Код перемещает курсор в третью строку и изменяет значение для столбца PRICE
к 10.99, и затем обновляет базу данных с новой ценой.
Вызов метода updateRow
обновляет базу данных потому что jdbcRs
поддержал его соединение с базой данных. Для разъединенного RowSet
объекты, ситуация отличается.
Если владелец цепочки Перерыва на кофе будет хотеть добавить один или более кофе к тому, что он предлагает, то владелец должен будет добавить одну строку к COFFEES
таблица для каждого нового кофе, как делается в следующем фрагменте кода от JdbcRowSetSample
. Заметьте это потому что jdbcRs
объект всегда соединяется с базой данных, вставляя строку в a JdbcRowSet
объект является тем же самым как вставкой строки в a ResultSet
объект: Вы перемещаетесь в курсор к строке вставки, используете соответствующий updater метод, чтобы установить значение для каждого столбца, и вызвать метод insertRow
:
jdbcRs.moveToInsertRow(); jdbcRs.updateString("COF_NAME", "HouseBlend"); jdbcRs.updateInt("SUP_ID", 49); jdbcRs.updateFloat("PRICE", 7.99f); jdbcRs.updateInt("SALES", 0); jdbcRs.updateInt("TOTAL", 0); jdbcRs.insertRow(); jdbcRs.moveToInsertRow(); jdbcRs.updateString("COF_NAME", "HouseDecaf"); jdbcRs.updateInt("SUP_ID", 49); jdbcRs.updateFloat("PRICE", 8.99f); jdbcRs.updateInt("SALES", 0); jdbcRs.updateInt("TOTAL", 0); jdbcRs.insertRow();
Когда Вы вызываете метод insertRow
, новая строка вставляется в jdbcRs
возразите и также вставляется в базу данных. Предыдущий фрагмент кода проходит через этот процесс дважды, таким образом, две новых строки вставляются в jdbcRs
возразите и база данных.
Как истина с обновлением данных, и вставка новой строки, удаляя строку все равно для a JdbcRowSet
объект что касается a ResultSet
объект. Владелец хочет прекратить продажу французского Жареного кофе без кофеина, который является последней строкой в jdbcRs
объект. В следующих строках кода первая строка перемещает курсор в последнюю строку, и вторые удаления строки последняя строка от jdbcRs
возразите и от базы данных:
jdbcRs.last(); jdbcRs.deleteRow();
Выборка JdbcRowSetSample
делает следующее:
JdbcRowSet
объект, инициализированный с ResultSet
объект, который был произведен выполнением запроса, который получает все строки в COFFEES
таблицаCOFFEES
таблица и обновления PRICE
столбец в той строкеHouseBlend
и один для HouseDecaf