Для написания приложений, нуждающихся в получении доступа к базе данных Oracle, можно использовать как язык PL/SQL, так и язык Java. Хотя PL/SQL и обладает некоторой объектно-ориентированной функциональностью, язык Java является хорошо известным объектно-ориентированным языком программирования. Если приложение нуждается в постоянном получении доступа к базе данных и обработке больших объемов данных, применение PL/SQL, пожалуй, будет более правильным вариантом. Для разработки открытых распределенных приложений больше подходит язык Java.
В состав базы данных Oracle входит механизм JVM (Java Virtual Machine — виртуальная машина Java), предназначенный для интерпретации Java-кода внутри базы данных. Точно так же, как PL/SQL позволяет сохранять код на сервере и использовать его множество раз, Java позволяет создавать хранимые процедуры и сохранять их в базе данных Oracle. Эти хранимые процедуры имеют вид классов Java. Доступными для механизма JVM в Oracle файлы Java делаются их загрузкой в базу данных Oracle в качестве объектов схемы.
Использовать язык Java в базе данных Oracle можно несколькими способами. Можно вызвать методы Java в классах, которые загружаются в базу данных в виде хранимых процедур Java. Вдобавок можно использовать два разных API-интерфейса — JDBC (Java Database Connectivity) или SQLJ — для получения доступа к базе данных Oracle из прикладной Java-программы. В следующих разделах приведено краткое описание всех этих способов работы с Java в базе данных Oracle.
Хранимые процедуры Java
Хранимые процедуры Java, естественно, пишутся на языка Java, и облегчают реализацию интенсивной по объемам данных бизнес-логики. Эти процедуры хранятся внутри базы данных, как и хранимые процедуры PL/SQL. Их можно считать связующим звеном между средами, в которых используются, и средами, в которых не используются Java-приложения.
Выполнять хранимые процедуры Java можно точно так же, как и хранимые процедуры PL/SQL. Для создания хранимой процедуры Java потребуется выполнить следующие шаги.
- Определите класс Java.
- Скомпилируйте новый класс с применением компилятора Java.
- Загрузите класс в базу данных Oracle с помощью работающей утилиты командной строки loadjava.
- Опубликуйте хранимую процедуру Java.
После выполнения этих шагов хранимую процедуру Java можно вызывать.
Интерфейс JDBC
Интерфейс JDBC является популярным методом подключения к базе данных Oracle из Java. Полный пример Java-программы приводился в главе 10. На самом деле JDBC представляет собой целый набор интерфейсов для выполнения запросов к базам данных и обработки SQL-данных на языке Java.
В листинге 1 ниже показана простая программа JDBC, предусматривающая установку соединения с базой данных Oracle и выполнение в ней простого SQL-запроса.
import java.sql.*; public class JDBCExample { public static void main(String args[]) throws SQLException /* Объявление используемого типа драйвера Oracle */ {DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver()); /* Создание соединения с базой данных для программы JDBC */ Connection conn = DriverManager.getConnection( "jdbc:oracle:thin:@nicholas:1521:aparna","hr","hr"); Statement stmt = conn.createStatement(); /* Передача запроса SQL и сохранение результатов в результирующем наборе rs */ ResultSet rs = stmt.executeQuery("select emp_id, emp_name,salary from employees"); /* Доступ к содержимому результирующего набора rs по строкам в цикле while */ while(rs.next()){ int number = rs.getInt(1); String name= rs.getString(2); System.out.println(number+" "+name+" "+salary); } /* Закрытие результирующего набора JDBC и соединения с базой данных */ rs.close(); conn.close(); } }
JDBC идеально подходит для динамических SQL-запросов, в которых SQL-операторы остаются неизвестными вплоть до времени выполнения.
Интерфейс SQLJ
Интерфейс SQLJ представляет собой дополнительный API-интерфейс и идеально подходит для приложений, в которых используются статические SQL-запросы (SQL-запросы, в которых SQL-операторы известны еще до выполнения). Благодаря своей статической природе, SQLJ позволяет обеспечивать перехват ошибок до их возникновения во время выполнения. Следует иметь в виду, что даже в случае SQLJ для получения доступа к базе данных все равно используются драйверы JDBC.
Для выполнения программы SQLJ потребуется выполнить перечисленные ниже шаги.
- Создайте исходный код SQLJ.
- Преобразуйте исходный код SQLJ в исходный код Java с помощью компилятора Java.
- Запустите исполняемую программу SQLJ после подключения к базе данных.
В листинге 2 приведен простой пример программы SQLJ, который показывает, как выполнять SQL-оператор из Java.
import java.sql.*; import sqlj.runtime.ref.DefaultContext; import oracle.sqlj.runtime.Oracle; /* Объявление переменных */ /* Определение типа Iterator для сохранения результатов запроса */ #sql iterator ExampleIter (int emp_id, String emp_name,float salary); public class MyExample /* Метод main */ { public static void main (String args[]) throws SQLException { /* Установка соединения с базой данных для SQLJ */ Oracle.connect ("jdbc:oracle:thin:@shannon:1234:nicholas1", "hr", "hr"); /* Вставка строки в таблицу employees */ #sql { insert into employees (emp_id, emp_name, salary) values (1001, 'Nina Alapati', 50000) }; /* Создание экземпляра итератора ExampleIter */ ExampleIter iter; /* Сохранение результатов запроса SELECT в итераторе ExampleIter */ #sql iter={ select emp_id, emp_name, salary from employees }; /* Получение доступа к сохраненным в итераторе данным с помощью метода next() */ while (iter.next()) { System.out.println (iter.emp_id,()+" "+iter.emp_name()+" "+iter.salary()); } } }
Как видно в этом листинге, SQLJ представляет собой не более чем просто вложенный SQL в программе Java. С помощью SQLJ очень легко обращаться к базе данных из кода Java. Более подробная информация по Oracle и Java доступна по адресу http://otn.oracle.com/tech/java/content.html.
В этом приложении были приведены лишь очень краткие сведения по возможностям SQL и PL/SQL в Oracle Database 11g. Хотя от администраторов баз данных Oracle не всегда требуют хорошо разбираться в SQL и PL/SQL, чем больше вы будете знать об этих языках, тем более высоким будет ваш профессиональный уровень как администратора баз данных Oracle.