CITKIT.ru
3 терабайта свободного софта!
Logo    
IT-рынок Новости мира IT Океан(!) софта на CITKIT.ru Форумы Поступления в библиотеку Учебный центр Курилка
CitForum    CITForum на CD Море(!) аналитической информации! :: CITFORUM.RU
IT-консалтинг Software Engineering Программирование Open Source СУБД Безопасность Internet Сети Операционные системы Hardware

23.05.2005

Google
WWW CITForum.ru

Новости мира IT:

  • 11.05 - Intel создает свою группу по Open Source
  • 11.05 - Банк контролирует использование USB устройств при помощи DeviceLock
  • 11.05 - Microsoft устранила опасную дыру в Windows
  • 11.05 - "Корпорация ОСС" создает антимонопольный альянс операторов IP-телефонии
  • 11.05 - В Mac OS X найдены множественные уязвимости
  • 11.05 - "Билайн" запускает услугу "Мобильная почта"
  • 11.05 - Две критические уязвимости в браузере Firefox 1.0.3
  • 11.05 - IBM покупает начинающую Open Source-компанию Gluecode
  • 11.05 - Microsoft готова к битве с Open Source за школы
  • 11.05 - Sun завершит "открытие" Solaris в ближайшие 45 дней
  • 11.05 - Создатели браузера Firefox выпускают юбилейные монеты в честь 50 миллионов скачанных копий
  • 11.05 - Вышла пятая версия мобильной ОС от Microsoft
  • 11.05 - Поисковые движки умнеют быстрее, чем люди
  • 11.05 - Фишеры постоянно совершенствуются
  • 11.05 - Специалисты прогнозируют появление аналога Google Adsense от "Яндекс"
  • 06.05 - ICANN озаботилась проблемой торговых марок
  • 06.05 - Google патентует сортировку новостей
  • 06.05 - Intel готовит двуядерные процессоры второго поколения
  • 06.05 - Schoolforge-UK и OSC продвигают Open Source в школы
  • 06.05 - Новая версия рекламной программы подстрекает пользователей купить ПО для своего лечения
  • 06.05 - Microsoft продает ряд своих закрытых разработок
  • 06.05 - Google Labs анонсировал ускоритель интернета
  • 06.05 - Microsoft подвешивает пиратам "морковку"
  • 06.05 - В США входят в обиход "интеллектуальные" тележки для супермаркетов
  • 06.05 - Microsoft работает над аналогом PDF
  • 05.05 - Yahoo video search теперь доступен массам
  • 05.05 - Алмазы помогут бороться с хакерами
  • 05.05 - Интернет-охоту хотят запретить
  • 05.05 - Microsoft привлекает блоггеров для теста Longhorn
  • 05.05 - Основатель Red Hat предложил Стиву Джобсу помощь в решении проблемы с торговой маркой
  • 05.05 - Компьютерная система оргкомитета Кубка мира по футболу 2006 года пострадала от червя Sober
  • 04.05 - Cisco Systems представила многофункциональный продукт Adaptive Security Appliance 5500
  • 04.05 - Администрация Евросоюза поддержала идею всеевропейской интернет-библиотеки
  • 04.05 - Компьютерный вирус дарит билеты на чемпионат мира по футболу
  • 04.05 - Лаборатория Касперского: Обзор вирусной активности - апрель 2005
  • 04.05 - Microsoft хочет отсудить у россиянина два домена
  • 04.05 - Сделка между Lenovo и IBM завершена
  • 04.05 - Эпидемия червя Sober.p зафиксирована в Западной Европе
  • 04.05 - Panda Software публикует отчет о вирусной активности за апрель
  • 03.05 - Институт SANS обновил список наиболее опасных уязвимостей

    Архив новостей >>>


  • 2003 г

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

    © Владимир Пржиялковский,
    координатор Евро-Азиатской Группы Пользователей Oracle,
    преподаватель УКЦ Interface Ltd.

    Взаимодействие с базой данных через 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 с общим для всех примеров текстом:

    import java.sql.*;
    import oracle.jdbc.driver.*;

    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) { return; }

    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));
    }

    st.close();
    cn.close();

    }
    catch (Exception e) { return; }
    finally { System.out.println("All that happened"); }
    }
    }

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

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

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

    SET CLASSPATH=%ORACLE_HOME%\jdbc\lib\classes12.zip;.

    javac StaffByJDBC.java

    java StaffByJDBC thin

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

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

    SET CLASSPATH=%ORACLE_HOME%\jdbc\lib\classes12.zip;.

    javac StaffByJDBC.java

    java StaffByJDBC oci

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

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

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

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

    sqlplus scott/tiger

    SQL> ALTER JAVA SOURCE "StaffByJDBC" COMPILE;

    Java altered.

    SQL> ALTER JAVA CLASS "StaffByJDBC" COMPILE;

    Java altered.

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

    Function created.

    SQL> EXEC liststaff('kprb')

    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");

                MyIter iter;
               #sql iter={ select ename, empno, sal from emp };
               while (iter.next()) {

                        System.out.println
                               (iter.ename()+" "+iter.empno()+" "+iter.sal());
                   }
             }
    }

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

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

    SET CLASSPATH=%ORACLE_HOME%\jdbc\lib\classes12.zip;.
    SET CLASSPATH=%CLASSPATH%;%ORACLE_HOME%\sqlj\lib\translator.zip
    SET CLASSPATH=%CLASSPATH%;%ORACLE_HOME%\sqlj\lib\runtime12.zip

    sqlj StaffBySQLJ.sqlj

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

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

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

    java StaffBySQLJ

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

    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-драйвера выше).

    Дополнительная информация

    • Java и Oracle - это очень просто
    • Вы можете отправить свое мнение о материале его автору
    • Обратиться в Interface Ltd. за дополнительной информацией/по вопросу приобретения продуктов
    • Курсы по продуктам фирмы Oracle
    • Другие статьи по продуктам Oracle из рубрики "Мастерская Oracle"

    За дополнительной информацией обращайтесь в компанию Interface Ltd.
     


    ХАЙВЕЙ - лучший российский хостинг-провайдер: хостинг, регистрация доменов, услуга Ваша@почта, поддержка 24 часа


    NetPromoter - единственный российский профессиональный комплекс программ и сервисов для раскрутки сайта и интернет-статистики


    STSS - известный поставщик надежных серверных решений различного назначения на платформе Intel (Xeon) и AMD.


    5-55: the ITIL company. Практический опыт и теоретические знания на лучших семинарах по ITIL и процессам ITSM.


    Подписка на новости IT-портала CITForum.ru
    (библиотека, ftp-архив CITKIT.ru)

    Новые поступления в on-line библиотеку:

    28 апреля

  • Выбор первого дистрибутива Linux: Пособие для начинающих
  • Обфускация и защита программных продуктов
  • Анализ и оптимизация циклов с помощью производящих функций
  • Стратегии объектно-реляционного отображения: систематизация и анализ на основе паттернов

    26 апреля

  • Business Intelligence обещает значительный рост в 2005 году
  • Десять основных тенденций 2005 года в области Business Intelligence и Хранилищ данных
  • Управление эффективностью бизнеса и предсказуемость
  • Увеличение эффективности бизнеса: пять ошибок управления, которых следует избегать
  • Потребность в организационных данных: модель комплексного управления эффективностью бизнеса
  • Технология Хранилищ данных для государственных учреждений
  • Оцените, насколько совершенно ваше Хранилище данных

    21 апреля

  • Исполнение моделей при помощи виртуальной машины
  • Параллельные алгоритмы компьютерной алгебры
  • От стандарта до стандарта (о стандартизации оптических разъемов)
  • За штурвалом IP-станции

    Продолжение дискуссии читателей:

  • Линукс и пользователи, или что мне не нравится в Linux
  • Еще один взгляд на альтернативные ОС (и софт для них)
  • О некомпетентности пользователя Windows
  • Переписка Долгачева В.С. и Монахова В.В.

    19 апреля

  • Межпротокольный шлюз NAT-PT с функциями DNS-ALG и FTP-ALG для обеспечения взаимодействия между сетями IPv4 и IPv6
  • Рефакторинг архитектуры программного обеспечения: выделение слоев
  • Комбинаторика слов и построение тестовых последовательностей
  • Функциональное тестирование Web-приложений на основе технологии UniTesK

    14 апреля

  • Как организовать двойную парольную защиту данных в Oracle
  • Деревянный интерфейс

    Продолжение дискуссии читателей:

  • Microsoft против мира
  • Впечатления от прочитанного

    12 апреля

  • Крупные проблемы и текущие задачи исследований в области баз данных
  • Глава 2 из книги Т.Кайта "Oracle для профессионалов"Архитектура

    Дискуссия читателей о Linux и Windows:

  • Деньги правят миром, и у кого их больше, тот и прав!
  • О злокозненности некомпетентных пользователей, или почему я не люблю ограниченных пользователей Windows

    7 апреля

  • О доблести Билла Гейтса, или почему Windows лучше, чем LINUX или Mac OS
  • Витая пара - все ли так просто?!
  • Выбираем сервер печати
  • Один слой хорошо, а два - лучше (о пишущих DVD-приводах)

    5 апреля

  • Использование Caché SQL Gateway
  • Глава 19 из книги Т.Кайта "Oracle для профессионалов"Хранимые процедуры на языке Java
  • Что такое PostgreSQL?
  • Обновлен PostgreSQL FAQ

    31 марта

  • Использование Веб-сервисов в Caché
  • Защита на уровне строк (Oracle)
  • Секции в реальном мире

    29 марта

  • Разработка успешных приложений для Oracle - первая глава из книги Тома Кайта "Oracle для профессионалов"
  • Web-сервисы: растущие опасения (мнение аналитиков IDC)
  • Технология OLAP - мощная альтернатива электронным таблицам
  • Какой модной стала подготовка отчетности

    24 марта

  • Многоверсионность данных и управление параллельными транзакциями
  • Исключение из правил. Опыт разработки и внедрения финансовой корпоративной системы
  • Обнаружение компрометаций ядра Linux с помощью gdb
  • Корпоративная сервисная шина - "бюджетный" подход к решению задач интеграции
  • Сервис-ориентированная архитектура
  • Бизнес-процессы и XML

    22 марта

  • Доступно. И точка! (обзор точек беспроводного доступа)
  • Коммутаторы Fast/Gigabit Ethernet для "большой" сети
  • Push to Talk: нажми на кнопку и ...говори
  • Сети нового поколения и технология softswitch

    17 марта

  • Часто задаваемые вопросы о proxy (proxy FAQ)
  • Самонастраивающаяся база данных: управляемые приложения и настройка SQL
  • Еще раз о волоконных трассах
  • Настраиваем русский Unicode в FreeBSD-5.3.

    10 марта

  • Еще не сказанное о волоконной оптике
  • Wi-Fi на службе оператора
  • Пора менять платформу?
    (о сокетах LGA775 и PGA478)

    Oracle:

  • Детальный аудит для практических целей
  • Шифруем свои ресурсы данных

    3 марта

  • Требования к проекту. Классификация - первый шаг к пониманию
  • Gtk vs. Qt: драки не будет
  • Управление бизнесом "по максимуму": BPM для финансовых учреждений
  • Реализация решения по управлению эффективностью бизнеса
  • Новые SerialATA-винчестеры
  • Карман для сервера

    1 марта

  • Выбрать корпус - нет ничего проще?
  • Создание виртуальной сети с удаленной загрузкой узлов
  • Текущее состояние и перспективы развития рынка интеграционных технологий
  • Интеграция корпоративной информации: новое направление
  • Архитектурные подходы к консолидации

    24 февраля

  • Каждому проекту своя методология
  • Императив интеграции
  • Безопасность IP-телефонии - полевые зарисовки
  • О злокозненности Билла Гейтса, или почему я не люблю Windows

    22 февраля

  • Oracle10: шифруем данные
  • В версии Oracle10 "виртуальные частные базы данных" данных стали избирательнее
  • Каждому (пользователю) свое (данное в таблице)
    Часть 1
    Часть 2
  • Ускоряем интернет
  • Сетевая аутентификация на практике
  • В фокусе Microsoft Virtual Server 2005

    17 февраля

    Открыт новый раздел
    Все об Open Source

    Все новости >>>



  • IT-консалтинг Software Engineering Программирование Open Source СУБД Безопасность Internet Сети Операционные системы Hardware

    Информация для рекламодателей PR-акции, размещение рекламы - pr@citforum.ru, тел. +7 095 4119920 Пресс-релизы - manager@citforum.ru
    Послать комментарий
    Информация для авторов
    Rambler's Top100 TopList liveinternet.ru: показано число просмотров за 24 часа, посетителей за 24 часа и за сегодня This Web server launched on February 24, 1997
    Copyright © 1997-2000 CIT, © 2001-2004 CIT Forum
    Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...