Построение 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(); // Закрытие итератора