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

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

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

Среда проектирования

Среда проектирования Oracle JDeveloper позволяет создавать приложения различных типов на языке Java, включая создание сервлетов, JSP-страниц, клиентских Java-приложений, аплетов, компонентов JavaBeans, компонентов EJB, построение XML-приложений Oracle, формирование хранимых процедур, генерацию форм данных InfoBus, разработку компонентов с архитектурой Business Component for Java (BC4J). Для реализации доступа к базам данных среда JDeveloper позволяет применять как механизм JDBC, так и создавать специальные SQLJ-приложения.

Разработка любого приложения начинается с создания рабочего пространства (команда меню File | New Workspace )., Затем создания проекта (команда меню File | New Project ), при котором в зависимости от выбранного типа проекта мастером построения проекта формируется пустой проект или проект указанного типа.

Построение SQLJ-приложений

Для создания SQLJ-приложения следует сформировать пустой проект, а затем добавить в него SQLJ-файл (команда меню File | New, выбрать пиктограмму SQLJFile).

SQLJ-файл - это файл с кодом программы на языке Java, в который включены SQLJ-операторы.

SQLJ-операторы могут быть двух видов:

  • SQLJ-объявления;
  • SQLJ-исполняемые операторы.

SQLJ-оператор может иметь следующее формальное описание:

#sql {sql-оператор };  // Оператор без возвращения результирующего набора

или

#sql выражение={sql-оператор};          // Оператор, возвращающий 
                                        // результирующий набор

Для поддержки возможности подключения во время компиляции SQLJ-транслятора к базе данных, с целью проверки синтаксиса введенного SQL-кода, следует создать объект соединение (команда меню Project | Properties, вкладка SQLJ), установить флажок Check SQL semantics against database shcema, выбрать New Connection и определить параметры подключения к базе данных, введя ее URL-адрес (localhost на локальном компьютере), имя пользователя и пароль).

При формировании SQLJ-приложения среда JDeveloper автоматически вставляет в начало приложения код, выполняющий подключение необходимых библиотек.

Например:

import sqlj.runtime.*;
import sqlj.runtime.ref.*;
import java.sql.*;
import java.sql.Date;
import oracle.sql.*;
import oracle.sqlj.runtime.Oracle;
public class MySQLJ1 { 
public MySQLJ1() {}  // Конструктор
public static void main (String[] args) throws SQLException { }
 }

Для подключения к базе данных из SQLJ-приложения первоначально следует создать объект типа данного класса, зарегистрировать драйвер и установить контекст по умолчанию.

Например:

MySQLJ1 sqlapp= new MySQLJ1();
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
DefaultContext.setDefaultContext( new DefaultContext(
       "jdbc:oracle:thin:@db.com:1521:ORCL","scott","tiger",false));
if (DefaultContext.getDefaultContext==null){
// Ошибка подключения к базе данных)
}

Для доступа к таблице базы данных следует объявить класс итератора (вставить в код класса до метода main ).

Например:

#sql public iterator Tbl1Iter (int f1, string f2, float f3);

Итераторы могут быть именованные и позиционные. SQLJ-транслятор в зависимости от типа итератора генерирует класс итератора, реализующий интерфейс sqlj.runtime.NamedIterator или sqlj.runtime.PositionedIterator. Оба этих интерфейса наследуют интерфейс ResultSetIterator, предоставляющий следующие методы:

  • getResultSet - извлечение из итератора результирующего набора;
  • next - переход к следующей строке итератора;
  • isClosed - определение, закрыт ли итератор;
  • close - закрытие итератора.

Для использования итератора следует объявить объект типа итератора, описать выполняемый итератор, а затем, используя метод next, последовательно выбирать строки результирующего набора.

Например:

Tbl1Iter t1=null;   // Объект типа итератора
#sql t1= { SELECT       //Выполняемый итератор
             Fl1 as a1, Fl2 as a2, Fl3 as a3
             FROM Tbl1};
while (t1.next()){
System.out.println( t1.a1());  // Вывод значения столбца
                               // результирующего набора
System.out.println( t1.a2());  
System.out.println( t1.a3()); 
}
t1.close();      // Закрытие итератора