Spec-Zone .ru
спецификации, руководства, описания, API
След: JDBC (ТМ) Доступ к базе данных
Урок: Основы JDBC
Используя Объекты JdbcRowSet
Домашняя страница > JDBC (ТМ) Доступ к базе данных > Основы JDBC

Используя Объекты JdbcRowSet

A JdbcRowSet объект является улучшенным ResultSet объект. Это поддерживает соединение со своим источником данных, так же, как a ResultSet объект делает. Большая разница - то, что у этого есть ряд свойств и механизма уведомления слушателя, которые делают это компонентом JavaBeans.

Одно из основного использования a JdbcRowSet объект состоит в том, чтобы сделать a ResultSet возразите с возможностью прокрутки и обновляемый, когда у этого иначе нет тех возможностей.

Этот раздел затрагивает следующие темы:

Создание Объектов JdbcRowSet

Можно создать a JdbcRowSet объект различными способами:

Отметьте: Альтернативно, можно использовать конструктора от JdbcRowSet реализация Вашего драйвера JDBC. Однако, реализации RowSet интерфейс будет отличаться от ссылочной реализации. У этих реализаций будут различные имена и конструкторы. Например, Oracle реализация драйвера JDBC JdbcRowSet интерфейс называют oracle.jdbc.rowset.OracleJDBCRowSet.

Передача Объектов ResultSet

Самый простой способ создать 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.

Используя Интерфейс RowSetFactory

С 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 и позже:

Значение по умолчанию Объекты JdbcRowSet

Когда Вы создаете a JdbcRowSet объект с конструктором по умолчанию, новым JdbcRowSet у объекта будут следующие свойства:

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

Установка Свойств

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

Чтобы получить его данные, a JdbcRowSet возразите первым потребностям соединиться с базой данных. Следующие четыре свойства содержат информацию, используемую в получении соединения с базой данных.

То, который из этих свойств Вы устанавливаете, зависит от того, как Вы собираетесь сделать соединение. Привилегированный путь состоит в том, чтобы использовать 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 метод делает много вещей для Вас в фоновом режиме:

Используя Объекты JdbcRowSet

Вы обновляете, вставляете, и удаляете строку в a JdbcRowSet возразите тому же самому способу, которым Вы обновляете, вставляете, и удаляете строку в обновляемом ResultSet объект. Точно так же Вы перемещаетесь по a JdbcRowSet возразите тому же самому способу, которым Вы перемещаетесь по с возможностью прокрутки ResultSet объект.

Цепочка Перерыва на кофе кофеен, полученных, у другой цепочки кофеен и теперь есть унаследованная база данных, которая не поддерживает прокрутку или обновление набора результатов. Другими словами, любой ResultSet у объекта, произведенного этой унаследованной базой данных, нет курсора с возможностью прокрутки, и данные в этом не могут быть изменены. Однако, создавая a JdbcRowSet объект заполняется с данными от a ResultSet объект, можно, в действительности, сделать ResultSet возразите с возможностью прокрутки и обновляемый.

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

Этот раздел затрагивает следующие темы:

Навигация по Объектам 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 делает следующее:


Проблемы с примерами? Попытайтесь Компилировать и Выполнить Примеры: FAQ.
Жалобы? Поздравление? Предложения? Дайте нам свою обратную связь.

Предыдущая страница: Используя Объекты RowSet
Следующая страница: Используя CachedRowSetObjects