Меню Рубрики

Установка jdbc для oracle

Java: подключение к базам данных Oracle

Часто для выполнения задач по манипулированию данными программам Java требуется подключиться к базе данных. JDBC — это интерфейс, который позволяет программе Java подключаться к базе данных и выдавать операторы DML и DDL. Интерфейс JDBC позволяет использовать динамические операторы SQL в тех ситуациях, когда количество и тип столбцов неизвестно до времени выполнения. (При написании статического SQL-кода можно применять интерфейс SQLJ, который позволяет вставлять операторы SQL в код Java.) JDBC предоставляет обширную библиотеку подпрограмм, которые помогают открывать и закрывать соединения с базами данных и обрабатывать данные.

Далее будет показано использование JDBC для подключения и работы с базами данных Oracle из программ Java.

Установка соединения с базой данных Oracle

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

  • Тонкий драйвер JDBC. Этот простейший клиентский драйвер Java предоставляет прямое соединение с базой данных посредством протокола TCP/IP. Этот драйвер требует наличия слушателя и использует сокеты для установления соединений базами данных.
  • OCI-драйвер JDBC. Этот драйвер требует наличия клиентской инсталляции Oracle, поэтому он является специфичным для Oracle. Этот драйвер в высшей степени масштабируем, и он может использовать пул соединений для обслуживания большого количества пользователей.
  • Тонкий драйвер серверной стороны JDBC. Действуя на сервере, этот драйвер подключается к удаленным базам данных и предоставляет те же функциональные возможности, что и тонкий драйвер клиентской стороны.
  • Внутренний драйвер серверной стороны JDBC. Как видно из его названия, этот драйвер располагается на сервере и используется виртуальной машиной Java Virtual Machine (Virtual Machine Java — JVM) для обмена данными с сервером базы данных Oracle.

После выбора конкретного типа драйвера JDBC необходимо указать драйвер JDBC одним из двух способов: используя статический метод registerDriver () класса DriverManager JDBC или применяя метод forName () класса java.lang . Эти два метода указания драйвера JDBC имеют следующий вид:

Как только драйвер JDBC загружен, с помощью статического метода getConnection () класса DriverManager можно установить соединение с базой данных. Этот метод создаст экземпляр класса connection JDBC. Соответствующий код приведен в листинге ниже.

Если вся предоставленная информация верна, соединение с базой данных будет установлено из приложения Java.

Работа с базой данных Oracle из Java

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

SQL-код нельзя выполнять непосредственно из программы Java. Вначале потребуется создать операторы JDBC, а затем нужно будет выполнить SQL-операторы. Давайте подробно рассмотрим эти два этапа.

Создание объекта Statement

Чтобы передать SQL-операторы базе данных, необходимо создать JDBC-объект Statement . Этот объект свяжет себя с открытым соединением, и в дальнейшем будет действовать в качестве канала, по которому SQL-операторы будут передаваться из программы Java в базу данных для выполнения. Объект Statement JDBC создается следующим образом:

С объектом stmt никакие SQL-операторы не связаны. Однако класс Statement содержит еще один объект, названный PreparedStatement, который, кроме того, что служит каналом для выполнения операторов, всегда содержит SQL-оператор. Этот SQL- оператор компилируется немедленно, причем он может компилироваться только один раз, а затем использоваться многократно, что является огромным преимуществом.

Однако для простоты в этом разделе описано только использование объекта Statement . Теперь рассмотрим выполнение SQL-операторов.

Выполнение SQL-операторов

Чтобы понять работу SQL-операторов JDBC, следует отделить операторы SELECT , выполняющие запросы к базе данных, от всех остальных операторов. В отличие от других операторов, операторы SELECT не изменяют состояние базы данных.

Вначале рассмотрим операторы обработки запросов.

Обработка запросов

Для получения результатов запроса операторы SELECT используют метод execute- Query() . Этот метод возвращает результаты в объекте ResultSet . Пример приведен в листинге ниже.

Обратите внимание, что rs — это экземпляр объекта resultSet , и именно он содержит результаты запроса. Объект resultSet предоставляет также курсор, что позволяет обращаться к результатам одним за другим. При каждом вызове метода resultSet курсор перемещается к следующей строке в результирующем наборе.

Обработка операторов DDL и не связанных с запросами операторов DML

Любой оператор, который изменяет состояние базы данных — будь то оператор DDL или оператор DML, такой как INSERT , UPDATE либо DELETE — выполняется с помощью метода executeUpdate() . Обратите внимание, что слово “update” (“обновление”) в имени метода указывает, что SQL-оператор будет изменять что-либо в базе данных.

Вот несколько примеров операторов executeUpdate()

Приведенные операторы создают объект Statement , а затем создают таблицу и вставляют в нее определенные данные.

При использовании интерфейса для выполнения SQL-операторов все обычные свойства SQL-транзакций, такие как целостность и продолжительность, сохраняются. По умолчанию каждый оператор утверждается после его выполнения, поскольку, как видно из следующего примера, значение conn.setAutoCommit() установлено равным true. Утверждение после выполнения каждого оператора можно гарантировать любым из следующих способов (при желании можно применить метод conn.rollback() , чтобы выполнить откат оператора):

Читайте также:  Установка замка на электрощиток

Ниже приведен простой пример, который демонстрирует использование операторов commit() и rollback():

Обработка ошибок

Все программы должны содержать встроенный обработчик исключений. Это особенно важно для тех операторов DML, которые изменяют состояние базы данных. Один из способов достижения этой цели предусматривает применение оператора rollback () при возникновении ошибки, что позволяет отменить все частичные изменения.

Для перехвата ошибок можно использовать метод SQLException (). В программах Java для генерирования (или выдачи) исключения используют блок кода try , а блок catch будет “перехватывать” выданное подобным образом исключение. Пример блока кода Java, который иллюстрирует эти концепции, приведен в листинге ниже.

Пример программы подключения к базе данных Oracle на Java

Пример программы, в которой все концепции, рассмотренные в предшествующих разделах нашей статьи, сведены воедино, приведен в листинге ниже. Вначале эта программа регистрирует тонкий драйвер Oracle и с его помощью подключается к базе данных. Затем она обновляет некоторые строки в таблице и применяет результирующий набор для вывода данных.

Поскольку в данном случае нас интересует администрирование базы данных Oracle, а не особенности программирования, эта простая программа Java, в основном, призвана привлечь внимание к аспектам соединения с базами данных Oracle.

источник

Java и данные из Oracle — все очень просто

Содержание


Взаимодействие с базой данных через JDBC

Общение программ на Java с данными в БД под управлением Oracle осуществляется двумя основными способами: через JDBC и через SQLJ.

Использование JDBC


JDBC и JDBC-драйверы

JDBC — это Java API (Application Program Interface) для доступа из Java-программ к SQL-СУБД разных типов. Подразумевается, что одна и та же Java-программа сумеет с помощью JDBC реально работать в среде Windows с данными mySQL или же в среде Solaris с данными Informix. Она же может быть хранимой процедурой в БД под Oracle и работать с данными той же Oracle или, к примеру, Sybase.

Реализуется JDBC в виде интерфейсов java.sql (основной) и javax.sql (расширенный). Конкретный набор классов, реализующий JDBC-интерфейс и осуществляющий доступ к конкретной СУБД, называется драйвером. JDBC-драйверы для своих СУБД поставляют все основные разработчики.

Описаниями JDBC определено четыре типа JDBC-драйверов: два «тонких» и два «толстых».

  • Соединительный драйвер JDBC (тип I, «толстый»)
  • «Родной» API-драйвер (тип II «толстый»)
  • Общий сетевой API-драйвер (тип III «частично тонкий»)
  • Драйвер прямого доступа через разъем (тип IV «тонкий»)

JDBC-драйверы в Oracle

Фирма Oracle поставляет для работы со своей СУБД следуюшие драйверы, удовлетворяющие спецификациям JDBC:

  • тонкий (thin; тип IV, для работы извне, через браузер, по TCP/IP)
  • толстый (thick; тип II, для локальной работы извне)
  • родной (тип II, для работы изнутри, из хранимых в БД Java-процедур)

Помимо этого около сотни разных фирм поставляют JDBC-драйверы собственной реализации типов I, II, III и IV, в том числе и для связи с Oracle. Они доступны в интернете.

Установка JDBC-драйверов для работы с Oracle

Пакет java.sql с классами JDBC, реализованными фирмой Oracle в соответствии с интерфейсами, предлагаемыми фирмой Sun, входит в состав стандартного JDK. Тонкий драйвер входит в состав файла classes111.zip, или его более поздней версии classes12.zip. При отсутствии на компьютере его можно получить по адресу download.oracle.com/otn/utilities_drivers/jdbc/817/classes12.zip (версия 8.1.7).

Толстый драйвер можно получить по адресу download.oracle.com/otn/utilities_drivers/jdbc/817/jdbc817jdk12-nt.zip (для NT) или download.oracle.com/otn/utilities_drivers/jdbc/817/jdbc817jdk12-sol.zip (для Solaris).

Для работы с драйверами нужно добавить путь к этим файлам к переменной среды окружения CLASSPATH.

Файл Java-программы для проверки связи через JDBC

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

public class StaffByJDBC
<
public static void main(String[] args)
<
String url = null;

if (args.length > 0) <
if (args[0].compareToIgnoreCase(«thin») == 0) <
url = «jdbc:oracle:thin:@localhost:1521:TEACHER»;
>
else if (args[0].compareToIgnoreCase(«oci») == 0) <
url = «jdbc:oracle:oci8:@TEACHER»;
>
else if (args[0].compareToIgnoreCase(«kprb») == 0) <
url = «jdbc:oracle:kprb:»;
>
>

if (url == null) <
System.out.println(«usage: StaffByJDBC [thin/oci]»);
return;
>

try <
DriverManager.registerDriver (
new oracle.jdbc.driver.OracleDriver());
>
catch (Exception e)

try <
Connection cn =
DriverManager.getConnection (url,»scott»,»tiger»);

Statement st = cn.createStatement();
ResultSet rs =
st.executeQuery («SELECT empno, ename FROM emp»);

while ( rs.next() ) <
System.out.println(«Number=» + rs.getString(1) + » » +
«Name=» + rs.getString(2) );
>

Работа с данными Oracle из внешних Java-программ


Работа с Oracle через тонкий драйвер

Трансляция и запуск программы (среда Unix — аналогично):

Работа с Oracle через толстый OCI-драйвер

Трансляция и запуск программы (среда Unix — аналогично):

Работа с данными Oracle из хранимых Java-программ


Обращение к БД из хранимых процедур

Загрузка, трансляция и запуск программы:

loadjava -user scott/tiger -oci8 -r StaffByJDBC.java

SQL> ALTER JAVA SOURCE «StaffByJDBC» COMPILE;

SQL> ALTER JAVA CLASS «StaffByJDBC» COMPILE;

SQL> CREATE OR REPLACE PROCEDURE liststaff (drivertype IN VARCHAR2)
AS LANGUAGE JAVA
NAME ‘StaffByJDBC.main (java.lang.String[])’;
/

PL/SQL procedure successfully completed.

Просмотр результатов — в трассировочном файле в каталоге ОС udump.

Особенности работы с kprb-драйвером

Работа с kprb-драйвером имеет свои отличия по отношению к работе со внешними драйверами:

  1. для хранимых программ явного подсоединения с БД не требуется — kprb-драйвер выполняет его неявно автоматически (код явного соединения из программ, написанных из расчета на внешнее соединение, будет проигнорирован)
  2. так как драйвер kprb не поддерживает AUTOCOMMIT, выполнять COMMIT или ROLLBACK в программе нужно явно
  3. устройством выдачи Sys.output по умолчанию является для kprb не экран, а трассировочные файлы в каталоге udump

Обращение к данным из триггеров Oracle

Специальных Java-триггеров в Oracle нет, и поэтому организация триггера на Java требует заведения внешней «оболочки» на PL/SQL, внутри которой делаются обращения к процедурам на Java, опубликованным для PL/SQL.

Вот как это может выглядеть:

CREATE TRIGGER scott.salary_check
BEFORE INSERT OR UPDATE OF sal, job ON scott.emp
FOR EACH ROW
WHEN (new.job <> ‘PRESIDENT’)
CALL check_sal(:new.job, :new.sal, :new.name);
/

Здесь CHECK_SAL должна быть опубликованной процедурой на Java.

Взаимодействие с базой данных через SQLJ

SQLJ представляет собой альтернативный JDBC способ работы с БД из Java-программ, использующий схему включающего языка/предкомпиляции. В отличие от JDBC, SQLJ позволяет использовать в программе только статические SQL-обращения к базе, однако исходный текст программ может выглядеть много компактнее.

Подобно Java-программам с JDBC, программы с SQLJ могут работать как на клиенте, так и на сервере.

SQLJ стандартизован комитетом ANSI. Более подробно о нем см. на web-узле консорциума SQLJ http://www.sqlj.org/.

Пример программы с использованием SQLJ

Типовой пример программы с использованием SQLJ (файл StaffBySQLJ.sqlj ):

import java.sql.*;
import sqlj.runtime.ref.DefaultContext;
import oracle.sqlj.runtime.Oracle;

#sql iterator MyIter (String ename, int empno, float sal);

public class StaffBySQLJ
<
public static void main (String args[]) throws SQLException
<
Oracle.connect
(«jdbc:oracle:thin:@localhost:1521:teacher»,
«scott», «tiger»);

Транслирование программы с SQLJ

Пример транслирования программы с SQLJ:

После этого в текущем каталоге появятся файлы (вариант версии 8.1.7):

StaffBySQLJ.class
StaffBySQLJ.java
StaffBySQLJ _SJProfile0.ser
StaffBySQLJ _SJProfileKeys.class
MyIter.class

Таким образом, программа sqlj не только предтстранслирует исходный яайл SQLJexample.sqlj, но и странслирует вслед порожденную ею же программу SQLJexample.java с учетом подготовленных свойств. Запуск конечного результата выглядит как обычно:

Более сложный пример транслирования:

sqlj -user=scott/tiger@jdbc:oracle:thin:@localhost:1521:teacher StaffBySQLJ.sqlj

Транслирование программ с SQLJ, предназначенных для исполнение на сервере, можно осуществлять

(а) явно (программа sqlj, как показано выше) с последующей загрузкой классов в БД (в этом случае их перед загрузкой удобно объединять в jar-файлы)
(б) неявно, путем загрузки файлов .sqlj в БД (автоматическая предтрансляция будет в этом случае выполнена.внутренними средствами Oracle).

Выполнение программы с SQLJ

Для возможности обращения программы c SQLJ, загруженной с помощью loadjava из jar-файла (или напрямую), можно выполнить

CREATE OR REPLACE PROCEDURE my_sqlj_example
AS LANGUAGE JAVA
NAME ‘StaffBySQLJ.main(java.lang.String[])’;

Программы с SQLJ, написанные для работы с БД извне (с клиентской стороны), всегда будут работоспособны и в качестве хранимых программ (то есть, на сервере). Обратное не обязательно верно (см. комментарий по поводу особенностей использования kprb-драйвера выше).

источник

Работа с базами данных с помощью JDBC драйвера

В этом уроке я бы хотел вас научить работать с базами данных MySQL, PostgreSQL, Oracle. А именно как подключится и выполнять SQL запросы к базе с помощью java.

Что такое JDBC?

JDBC Driver – (Java DataBase Connectivity — соединение с базами данных на Java) — платформенно-независимый промышленный стандарт взаимодействия Java-приложений с различными СУБД, реализованный в виде пакета java.sql , входящего в состав Java SE.

Зачем нужен JDBC?

JDBC – позволяет получать доступ к БД, а также выполнять к ней SQL запросы.

Шаг 1.

Скачиваем jar файл JDBC драйвера.

Шаг 2.

Подключение к БД Mysql:

Подключение к БД PostgreSQL:

Подключение к БД Oracle:

В 1-й строке мы указываем наш JDBC драйвер. Не забудьте добавить его в ClassPath иначе его компилятор его не увидит.
Во 2-й строке JDBC Manager который открывает соединение с базой данных и обеспечит нам дальнейшее обращение к ней.
И последняя строка закрывает соединение с БД.

Желательно строку для определения JDBC поместить в блок try для того чтобы контролировать его наличия в вашем приложении.

Шаг 3. Создание таблиц в БД.

Вынесем в отдельный метод соединение с БД.

Этот метод будет создавать в БД таблицу:

и в main методе вызываем метод createDbTable() который создаст таблицу в БД.

В результате вы должны получить:

Шаг 4. Добавление новой записи в БД.

метод который будет возвращать текущую дату и время:

И выполняем наш SQL запрос который лежит в переменной insertTableSQL

Шаг 5. Получение данных с БД.

Шаг 6. Удаление данных с БД.

Выполняем запрос на удаление:

Шаг 7. Обновление данных в БД.

Выполняем запрос на обновление записи:

Выводы.

Все действия с любой базой данных выполняются через SQL запросы, то есть нам достаточно знать SQL для манипуляцией данными в БД.

ПОХОЖИЕ ПУБЛИКАЦИИ

29 комментариев к статье «Работа с базами данных с помощью JDBC драйвера»

Проблема с подключением jdbc к приложению для Android – заголовок комментария.

Почему в жизни так бывает …

строка Connection connection = DriverManager.getConnection(“jdbc:postgresql://хост:порт/имя_дб”,”пользователь”, “пароль”);
выдаёт ошибку Unhandled exception type SQLException
( строка connection.close(); – выдаёт туже ошибку )

При добавлении строки import java.sql.SQLException; в MainActivity.java
выводит сообщение …
The import java.sql.SQLException is never used

При этом файл postgresql-9.2-1002.jdbc4.jar лежит в /libs

И в classpath добавлять пробовал, хотя многие источники говорят, что это не обязательно, достаточно держать файл postgresql-9.2-1002.jdbc4.jar в /libs

При нажатие ctrl+shift+O Eclips добавляет только:

источник

Oracle и Java: использование PL/SQL, JDBC, SQLJ

Для написания приложений, нуждающихся в получении доступа к базе данных 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 потребуется выполнить следующие шаги.

  1. Определите класс Java.
  2. Скомпилируйте новый класс с применением компилятора Java.
  3. Загрузите класс в базу данных Oracle с помощью работающей утилиты командной строки loadjava.
  4. Опубликуйте хранимую процедуру Java.

После выполнения этих шагов хранимую процедуру Java можно вызывать.

Интерфейс JDBC

Интерфейс JDBC является популярным методом подключения к базе данных Oracle из Java. Полный пример Java-программы приводился в главе 10. На самом деле JDBC представляет собой целый набор интерфейсов для выполнения запросов к базам данных и обработки SQL-данных на языке Java.

В листинге 1 ниже показана простая программа JDBC, предусматривающая установку соединения с базой данных Oracle и выполнение в ней простого SQL-запроса.

JDBC идеально подходит для динамических SQL-запросов, в которых SQL-операторы остаются неизвестными вплоть до времени выполнения.

Интерфейс SQLJ

Интерфейс SQLJ представляет собой дополнительный API-интерфейс и идеально подходит для приложений, в которых используются статические SQL-запросы (SQL-запросы, в которых SQL-операторы известны еще до выполнения). Благодаря своей статической природе, SQLJ позволяет обеспечивать перехват ошибок до их возникновения во время выполнения. Следует иметь в виду, что даже в случае SQLJ для получения доступа к базе данных все равно используются драйверы JDBC.
Для выполнения программы SQLJ потребуется выполнить перечисленные ниже шаги.

  1. Создайте исходный код SQLJ.
  2. Преобразуйте исходный код SQLJ в исходный код Java с помощью компилятора Java.
  3. Запустите исполняемую программу SQLJ после подключения к базе данных.

В листинге 2 приведен простой пример программы SQLJ, который показывает, как выполнять SQL-оператор из Java.

Как видно в этом листинге, 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.

источник

Добавить комментарий