Московский государственный университет имени М.В.Ломоносова
Опубликован: 20.12.2005 | Доступ: свободный | Студентов: 3148 / 372 | Оценка: 4.22 / 3.86 | Длительность: 12:03:00
ISBN: 978-5-9556-0068-0
Лекция 13:

Реализация доступа к базам данных в среде JBUILDER и среде JDEVELOPER

Аннотация: Рассматриваются механизмы доступа к базам данных из программ на языке Java посредством JDBC и SQLJ, описывается применение моста JDBC:ODBC.

Работа с базами данных

Язык Java позволяет реализовывать два механизма доступа к базам данных:

  • с применением средств JDBC;
  • с использованием SQLJ.

При реализации доступа через JDBC могут использоваться:

  • JDBC-драйверы;
  • мост JDBC-ODBC.

При реализации доступа через SQLJ SQL-операторы встраиваются непосредственно в код на языке Java, а затем обрабатываются SQLJ-предкомпилятором. Обычный SQLJ-предкомпилятор ограничивает синтаксис встраиваемых SQL-операторов стандартом SQL-92. Однако при применении SQLJ-предкомпиляторов, ориентированных на конкретные СУБД, допускается использование конструкций языка SQL, реализуемых в этих СУБД. Так, SQLJ-предкомпилятор для Oracle 9i позволяет не только статическое, но и динамическое встраивание SQL-операторов.

Реализация доступа к базам данных в среде JBUILDER

При создании программ на языке Java можно придерживаться "чистого" Java, что ограничивает возможности программиста использованием только классов и интерфейсов пакетов JDK. Однако, различные существующие среды программирования, включая и JBuilder, значительно расширяют возможности программиста, предоставляя дополнительные библиотеки классов. Далее будут рассмотрены классы и интерфейсы, применяемые для реализации доступа к базам данных как из пакетов JDK, так и предоставляемые средой JBuilder.

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

JBUILDER позволяет реализовывать доступ к базам данных с применением драйверов JDBC и с использованием моста JDBC-ODBC, реализующего непосредственный доступ к базе данных через ODBC-драйверы. Мост JDBC-ODBC может быть использован и в том случае, если JDBC-драйвер для базы данных отсутствует.

На следующей схеме представлен механизм взаимодействия компонентов, реализующих работу с базой данных.


Преимущество доступа с использованием JDBC-драйвера заключается в том, что нет необходимости устанавливать эти драйверы на каждой клиентской машине (в отличие от ODBC-драйверов, которые предварительно должны быть зарегистрированы на каждом клиенте).

Для реализации доступа к любому источнику данных в приложение должен быть добавлен компонент, представляющий связь с конкретным источником данных. К таким компонентам относятся:

  • Connection - интерфейс из пакета java.sql, используемый для соединения с источником данных.
  • Database - используется для указания класса драйвера и местоположения базы данных.
  • TextDataFile - указывает используемый текстовый файл.
  • DataStore - для доступа к базе данных DataStore.

Компоненты, представляющие в приложении структуру извлекаемых данных, называются наборами данных. К таким компонентам относятся:

  • ResultSet - набор данных для "чистого" Java.
  • TableDataSet - позволяет указать имя таблицы или имя текстового файла, представляющих источник данных, и определить параметры столбцов набора данных (тип, размер, значение по умолчанию, заголовок и т.д.).
  • QueryDataSet - используется для определения набора данных в терминах SQL-оператора.

Приложение может содержать компоненты, предназначенные для отображения информации из набора данных. Страница dbSwing палитры компонентов окна дизайнера содержит визуальные компоненты, специально предназначенные для отображения набора данных (эти классы не входят в JDK). К таким компонентам относятся:

  • JdbCheckBox - флажок.
  • JdbRadioButton - переключатель (радиокнопка).
  • JdbTextField - текстовое поле.
  • JdbComboBox - раскрывающийся список.
  • JdbSlider - бегунок
  • JdbTextPane - многострочное текстовое поле
  • JdbToggleButton - кнопка переключатель
  • JdbLabel - надпись
  • JdbTable - таблица
  • JdbTree - дерево.
  • JdbList - список значений поля текущей записи.

Для навигации по полям и записям набора данных можно использовать компонент JdbNavToolBar,


который предоставляет стандартный интерфейс, включающий возможность перехода от записи к записи, переход к первой и последней записи, добавление и удаление записи, отмена изменений, выполненных над текущей записью, обновление набора данных и фиксация сделанных изменений. Для изменения предусмотренного по умолчанию поведения кнопок компонента JdbNavToolBar можно:

  • создать производный класс и переопределить метод обработки сообщений actionPerformed() ;
  • получить ссылку на кнопку компонента и удалить в JdbNavToolBar ActionListener для кнопки, а затем добавить свой ActionListener.

Для определения текущего набора данных, используемого компонентом, следует вызвать метод getFocusedDataSet().

Дополнительно пакет com.borland.dbswing предоставляет компоненты, которые также могут использоваться для навигации по набору данных, включая:

  • JdbNavField - компонент, наследуемый от JTextField, и позволяющий выполнять поиск в наборе данных введенного значения, и при нахождении его делать найденную запись текущей. Набор данных, в котором выполняется поиск, определяется свойством dataSet, а столбец - свойством columnName. Если свойство columnName не указано, то используется столбец в таблице JdbTable, имеющий фокус, а если такого столбца нет - то первый столбец набора данных;
  • JdbNavComboBox и JdbNavList - компоненты, отображающие список значений столбца набора данных; при выборе элемента списка данная запись становится текущей. Набор данных, по которому выполняется навигация, определяется свойством dataSet, а столбец - свойством columnName (а при отсутствии значения данного свойства - так же как и для компонента JdbNavField );
  • JdbNavTree - компонент, наследуемый от JTree и позволяющий устанавливать текущей записью запись, выбранную в данном компоненте. Отображаемые значения определяются значениями свойств dataSet и columnName.