Kwert-soft.ru

IT Софт для ПК
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Java sql oracle

Package java.sql

    Interface Summary

    InterfaceDescription
    Array
    Class Summary

    ClassDescription
    Date
    Enum Summary

    EnumDescription
    ClientInfoStatus
    Exception Summary

    ExceptionDescription
    BatchUpdateException

    Package java.sql Description

    What the JDBC TM 4.2 API Includes

    Versions

    Classes, interfaces, methods, fields, constructors, and exceptions have the following «since» tags that indicate when they were introduced into the Java platform. When these «since» tags are used in Javadoc TM comments for the JDBC API, they indicate the following:

    • Since 1.8 — new in the JDBC 4.2 API and part of the Java SE platform, version 8
    • Since 1.7 — new in the JDBC 4.1 API and part of the Java SE platform, version 7
    • Since 1.6 — new in the JDBC 4.0 API and part of the Java SE platform, version 6
    • Since 1.4 — new in the JDBC 3.0 API and part of the J2SE platform, version 1.4
    • Since 1.2 — new in the JDBC 2.0 API and part of the J2SE platform, version 1.2
    • Since 1.1 or no «since» tag — in the original JDBC 1.0 API and part of the JDK TM , version 1.1

    NOTE: Many of the new features are optional; consequently, there is some variation in drivers and the features they support. Always check your driver’s documentation to see whether it supports a feature before you try to use it.

    NOTE: The class SQLPermission was added in the Java TM 2 SDK, Standard Edition, version 1.3 release. This class is used to prevent unauthorized access to the logging stream associated with the DriverManager , which may contain information such as table names, column data, and so on.

    What the java.sql Package Contains

    java.sql and javax.sql Features Introduced in the JDBC 4.2 API

    • Added JDBCType enum and SQLType interface
    • Support for REF CURSORS in CallableStatement
    • DatabaseMetaData methods to return maximum Logical LOB size and if Ref Cursors are supported
    • Added support for large update counts

    java.sql and javax.sql Features Introduced in the JDBC 4.1 API

    • Allow Connection , ResultSet and Statement objects to be used with the try-with-resources statement
    • Supported added to CallableStatement and ResultSet to specify the Java type to convert to via the getObject method
    • DatabaseMetaData methods to return PseudoColumns and if a generated key is always returned
    • Added support to Connection to specify a database schema, abort and timeout a physical connection.
    • Added support to close a Statement object when its dependent objects have been closed
    • Support for obtaining the parent logger for a Driver , DataSource , ConnectionPoolDataSource and XADataSource

    java.sql and javax.sql Features Introduced in the JDBC 4.0 API

    • auto java.sql.Driver discovery — no longer need to load a java.sql.Driver class via Class.forName
    • National Character Set support added
    • Support added for the SQL:2003 XML data type
    • SQLException enhancements — Added support for cause chaining; New SQLExceptions added for common SQLState class value codes
    • Enhanced Blob/Clob functionality — Support provided to create and free a Blob/Clob instance as well as additional methods added to improve accessibility
    • Support added for accessing a SQL ROWID
    • Support added to allow a JDBC application to access an instance of a JDBC resource that has been wrapped by a vendor, usually in an application server or connection pooling environment.
    • Availability to be notified when a PreparedStatement that is associated with a PooledConnection has been closed or the driver determines is invalid

    java.sql and javax.sql Features Introduced in the JDBC 3.0 API

    • Pooled statements — reuse of statements associated with a pooled connection
    • Savepoints — allow a transaction to be rolled back to a designated savepoint
    • Properties defined for ConnectionPoolDataSource — specify how connections are to be pooled
    • Metadata for parameters of a PreparedStatement object
    • Ability to retrieve values from automatically generated columns
    • Ability to have multiple ResultSet objects returned from CallableStatement objects open at the same time
    • Ability to identify parameters to CallableStatement objects by name as well as by index
    • ResultSet holdability — ability to specify whether cursors should be held open or closed at the end of a transaction
    • Ability to retrieve and update the SQL structured type instance that a Ref object references
    • Ability to programmatically update BLOB , CLOB , ARRAY , and REF values.
    • Addition of the java.sql.Types.DATALINK data type — allows JDBC drivers access to objects stored outside a data source
    • Addition of metadata for retrieving SQL type hierarchies

    java.sql Features Introduced in the JDBC 2.1 Core API

    • Scrollable result sets—using new methods in the ResultSet interface that allow the cursor to be moved to a particular row or to a position relative to its current position
    • Batch updates
    • Programmatic updates—using ResultSet updater methods
    • New data types—interfaces mapping the SQL3 data types
    • Custom mapping of user-defined types (UDTs)
    • Miscellaneous features, including performance hints, the use of character streams, full precision for java.math.BigDecimal values, additional security, and support for time zones in date, time, and timestamp values.

    javax.sql Features Introduced in the JDBC 2.0 Optional Package API

    • The DataSource interface as a means of making a connection. The Java Naming and Directory Interface TM (JNDI) is used for registering a DataSource object with a naming service and also for retrieving it.
    • Pooled connections — allowing connections to be used and reused
    • Distributed transactions — allowing a transaction to span diverse DBMS servers
    • RowSet technology — providing a convenient means of handling and passing data

    Custom Mapping of UDTs

    When these are in place for a UDT, calling the methods ResultSet.getObject or CallableStatement.getObject on that UDT will automatically retrieve the custom mapping for it. Also, the PreparedStatement.setObject method will automatically map the object back to its SQL type to store it in the data source.

    Package Specification

    Related Documentation

    • Getting Started—overviews of the major interfaces

    Chapters on the JDBC API—from the online version of The Java Tutorial Continued

    • Overview
    • Package
    • >Java™ Platform
      Standard Ed. 8

    Submit a bug or feature
    For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
    Copyright © 1993, 2020, Oracle and/or its affiliates. All rights reserved. Use is subject to license terms. Also see the documentation redistribution policy.

    JDBC пример

    В примере рассматривается взаимодействие сразу с несколькими СУБД (oracle, ms sql, postgresql, mysql, derby) по подключению к серверу, созданию и удалению схемы (базы данных), созданию и удалению таблицы. При небольшой доработке можно одновременно работать сразу с несколькими разнотипными реляционными СУБД. Пример создан с использованием всех основных принципов ООП (объектно-ориентированное программирование) — инкапсуляция-наследование-полиморфизм.

    На сайте приводится также пример записи файлов в бинарные (BLOB) и символьные (CLOB/TEXT) поля баз данных Oracle и MySQL, который можно увидеть здесь.

    Описание примера

    На скриншоте представлен JDBC пример в среде разработки Eclipse.

    Рассматриваемый JDBC пример включает несколько программных модулей, реализующих принципы ООП :

    • dao_base.java — базовый класс определения свойств и функций доступа к серверу БД;
    • dao_oracle.java, dao_mssql.java, dao_postgres.java, dao_mysql.java, dao_derby.java — классы, наследующие свойства базового класса и реализующие функции доступа к конкретному серверу БД;
    • test_jdbc.java — модуль тестирования.

    В директории lib размещаются драйверы JDBC различных провайдеров БД. В примере использовались следующие сервера баз данных : Oracle 10g Express Edition и MySQL 5.1

    Дополнительно пример включает СУБД Apache Derby (директория db), которая наряду с драйверами JDBC включена в исходный код примера. СУБД Derby работает в режиме «EmbeddedDriver», т.е. запускается под управлением виртуальной машины JVM вместе с примером. Пример можно использовать для разработки и отладки дополнительных функций. Исходный код примера в виде проекта Eclipse можно скачать здесь.

    Базовый класс, dao_base.java

    Базовый класс является абстрактным, включающим два абстрактных метода setURL() и getConnection(). Данные методы, определяющие строку подключения URL к серверу БД и возвращающие объект подключения Connection к серверу СУБД, должны быть реализованы в «наследниках».

    Метод RegisterDriverManager() подключает соответствующий JDBC драйвер к программе. Строка описания драйвера «driver» определяется в конструкторе. Подробнее о выборе и подключении драйвера JDBC можно познакомиться на странице «Класс DriverManager».

    Метод Connect() регистрирует драйвер JDBC и определяет свойства подключения.

    В связи с тем, что синтаксис создания схемы базы данных CREATE SCHEMA (и удаления «DROP SCHEMA») разных СУБД имеет отличия, то в базовом классе определены методы createSchema(final String schema) и dropSchema(final String schema), которые должны быть переопределены в наследующих классах.

    Метод execSQL(final String sql) используется для выполнения СУБД транзакций. В случае возникновения ошибки транзакции в консоль выводится код и сообщение об ошибке.

    Модули доступа к СУБД

    Модули доступа к серверам СУБД наследуют свойства базового класса и реализуют его функции.

    Исходный код dao_oracle.java

    При создании объекта в родительский конструктор передается описание драйвера. Метод setURL() определяет строку подключения к серверу СУБД. Объект подключения connection создается из родного для драйвера класса — для Oracle это OracleConnection.

    В связи с тем, что в Oracle схема связана, как правило, с учетной записью пользователя и создается, «можно сказать», при создании пользователя (при создании пользователем первого объекта), то в модуле dao_oracle функции создания и удаления схемы не переопределены.

    Исходный код dao_mssql.java

    В конструкторе класса определена строка описания драйвера. Формат строки подключения URL к серверу БД MS SQL представлен в методе setURL(String host, String database, int port). Если наименование базы данных «database» определить, то подключение будет выполнено к непосредственной базе данных, в противном случае к серверу.

    Исходный код dao_postgres.java

    PostgreSQL в отличие от остальных реляционных СУБД позволяет создавать несколько баз данных «DATABASE», которые являются контейнерами схем «SCHEMA». База данных «postgres» создается по умолчанию. В нашем модуле доступа мы не рассматриваем вопрос создания базы данных, который практически ничем не отличается от создания схемы. По умолчанию мы будем подключаться к БД «postgres», внутри которой будем создавать схему.

    Исходный код dao_mysql.java

    В СУБД MySQL понятия базы данных «DATABASE» и схемы «SCHEMA» можно сказать являются синонимами. Поэтому в синтаксисе создания базы данных можно использовать как «CREATE DATABASE database_name», так и «CREATE SCHEMA schema_name».

    Исходный код dao_derby.java

    Отличительная особенность СУБД Derby в режиме «EmbeddedDriver» заключается в том, что она работает под управлением виртуальной машины JVM вместе с примером. Для доступа к этой СУБД в «dao_derby» необходимо в строке подключения определить путь к БД. В нашем примере она располагается вместе с приложением.

    Тестирование JDBC модулей доступа к СУБД

    Для тестирования модулей доступа к серверам СУБД конечно необходимо использовать JUnit тесты. Но это не так наглядно. Использование JUnit при разработке приложения представлено на странице Тестирование программы, JUnit. В исходные коды примера в качестве образца включен тест подключения к серверу БД Apache Derby. Данная СУБД выбрана в качестве примера, поскольку управляется той же JVM, что и приложение и не требует дополнительной установки сервера СУБД.

    В модуле тестирования «test_jdbc.java» определим массив параметров подключения к серверу СУБД :

    Параметры подключения «params» нужно настроить. Для этого необходимо в первом поле указать HOST сервера СУБД. Для MSSQL неоходимо наряду с хостом указать соответствующий сервис сервера СУБД. Во второй колонке необходимо только подкорректировать SID сервера Oracle. В тестовом примере указывается SID сервера разработчика «XE». Для Derby указан относительный путь к БД. В следующих 2-х колонках необходимо привести соответствующие значения логина и пароля. В последней колонке указывается значение флага активности ACTIVE, который позволяет исключить сервер из тестирования. Данные параметры подключения используются в процедуре подключения createConnecion, которой необходимо передать модуль доступа и идентификатор СУБД :

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

    SQL-скрипты создания и удаления таблицы :

    В SQL-скриптах присутствуют символы ‘%s’, которые должны быть заменены либо на наименование схемы, либо на пустой символ.

    Процедура создания схемы и таблицы createObjects

    В процедуре «createObjects» схема создается во всех СУБД за исключением Oracle.

    После создания схемы СУБД MySQL и MSSQL выполняем переподключение к вновь созданной схеме для создания таблицы. В СУБД PostgreSQL и Derby создаем таблицу с указанием наименования схемы, т.е. «MEDIA».USERS .

    Процедура удаления схемы и таблицы dropObjects

    Процедура сначала удаляет таблицу, после чего удаляет схему, если СУБД не Oracle. Для удаления схемы в MS SQL необходимо «отключиться» от схемы, в противном случае будет ошибка с сообщением, что удалить невозможно в связи с имеющимися подключениями.

    Исходный код dao_derby.java

    В исходных кодах приведем только описание конструктора «test_jdbc». Все остальные, используемые в примере переменные и методы, представлены выше.

    В конструкторе в цикле выполняется создание объекта «dao», после чего выполняется подключение к серверу БД, создается схема и таблица во вновь созданной схеме. После этого вновь созданные объекты удаляются и «dao» отключается от сервера СУБД.

    На следующем скриншоте представлены сообщения данного JDBC примера в консоли Eclipse.

    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 — аналогично):

    java StaffByJDBC thin

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

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

    java StaffByJDBC oci

    Работа с данными 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[])’;
    /

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

    Транслирование программы с 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-драйвера выше).

    /привет/мир/etc

    Периодические заметки о программировании

    среда, 11 июня 2014 г.

    Java в СУБД Oracle, часть I

    Мне редко приходится писать на Java хранимые процедуры для СУБД Oracle. А когда приходится, всякий раз я трачу некоторое время на «восстановление контекста», чтобы вспомнить особенности встроенной JVM и работы с ней. Чтобы в следующий раз восстановление контекста прошло быстрее, в этой статье в конспективной форме я собрал самые необходимые сведения и примеры кода на Java для встроенной Oracle JVM.

    Вот так можно посмотреть, установлена ли поддержка Java в СУБД Oracle:

    Запрос был выполнен на Oracle 11gR2 Enterprise Edition. Но какая же версия Java поддерживается?

    Кстати, в Oracle 11gR2 Express Edition встроенная JVM отсутствует:

    Следующая таблица содержит ряд отличий стандартной JVM и встроенной в СУБД Oracle JVM.

    Стандартная JVMВстроенная Oracle JVM
    Исполнямый код запускается в сеансе ОС командной строкой ‘java ‘Исполнямый код запускается в сеансе СУБД Oracle вызовом PL/SQL процедуры или функции — обертки метода Java.
    При запуске вызывается метод public static void main(String args[])Может быть вызван любой из public static методов класса, опубликованный через PL/SQL процедуру или функцию — обертку.
    JVM живет, пока выполняется ‘java ‘JVM живет на протяжении сеанса работы с СУБД Oracle.
    Исходный код, байт-код и ресурсы содержатся в файлах ОС ( .java, .class, .properties ), компилируются и загружаются JVM из файлов ОС.Исходный код, байт-код и ресурсы хранятся в БД как объекты схемы ( JAVA SOURCE, JAVA CLASS, JAVA RESOURCE ), компилируются и загружаются для исполнения JVM из объектов схемы.
    Пространство имен конструируется из разделенных точками имен пакетов, например, java.util.regex или ru.trofimov.helloworldСтандартное пространство имен Java вкладывается в схемы Oracle. Классы стандартной библиотеки Java находятся в схеме SYS и доступны в других схемах через публичные синонимы.
    Имя класса: ru.trofimov.helloworld.HelloИмя класса (объекта схемы): ru/trofimov/helloworld/Hello
    См. примечание * внизу таблицы.
    Единственный CLASSPATH задает список директорий и jar-файлов, где JVM ищет классы для загрузки.Resolver, свой для каждого класса, задает список схем Oracle для поиска Java-объектов-схемы.
    Поддерживает графический интерфейс (GUI) и взаимодействие с пользователем посредством GUI.Не поддерживает графический интерфейс (GUI) и взаимодействие с пользователем посредством GUI.
    Поддерживает воспроизведение и запись звука с помощью звуковых средств компьютера.Не поддерживает воспроизведение и запись звука с помощью звуковых средств компьютера.
    Поддерживает эффективное параллельное выполнение задач с помощью Java потоков (threads).Синтаксис Java потоков (threads) поддерживается, но распараллеливания потоков, на самом деле, не происходит. Эффективное распараллеливание в СУБД Oracle происходит на уровне пользовательских сеансов.
    Для работы с БД Oracle используется драйвер JDBC.Для работы с БД Oracle используется так называемый Server-Side JDBC Internal Driver, взаимодействующий с БД минуя сетевой протокол и исключая накладные расходы.
    Опции компиляции задаются в командной строке компилятора javac .Опции компиляции задаются в командной строке утилиты loadjava , либо в таблице JAVA$OPTIONS (при помощи пакета DBMS_JAVA ), причем опции loadjava приоритетнее сохраненных в таблице.

    * Имя Java класса может быть до 4000 символов длиной, а имя объекта схемы данных — не более 30 символов. В связи с этим пакет dbms_java предоставляет функции shortname(class_name) и longname(object_name) , которые возращают длинное и короткое имена Java классов, соответственно. Пример:

    Теперь перейду к практике. Создам JAVA SOURCE, откомпилирую его в JAVA CLASS, опубликую и выполню.

    Строки 2 — 9 содержат исходный код на Java. Найдем созданные объекты JAVA SOURCE и JAVA CLASS в системном словаре Oracle:

    Создадим PL/SQL процедуру-обертку для метода hello класса Hello и выполним ее:

    По умолчанию вывод System.out.println() идет в трейс-файлы в директории udump . Вызов dbms_java.set_output позволяет перенаправить вывод на консоль в рамках текущей сессии.

    Продемонстрирую передачу аргумента методу Java:

    Кстати, можно найти метод Hello.helloUser и его параметр в системном словаре с помощью следующих запросов:

    А теперь я хочу вернуть значение из метода Java в вызывающий PL/SQL код.

    При передаче аргумента из PL/SQL в Java метод происходит автоматическое преобразование типа данных SQL в тип данных Java. А при возврате значения из Java метода в PL/SQL код происходит автоматическое преобразование из типа данных Java в тип данных SQL.

    Приведу таблицу соответствий основных типов данных SQL и Java (Подробнее см. в Oracle Database Java Developer’s Guide):

    Тип данных SQLТип данных Java
    CHAR, VARCHAR2java.lang.String
    oracle.sql.CHAR
    NUMBERboolean
    char
    byte
    short
    int
    long
    float
    double
    java.lang.Byte
    java.lang.Short
    java.lang.Integer
    java.lang.Long
    java.lang.Float
    java.lang.Double
    java.math.BigDecimal
    oracle.sql.NUMBER
    BINARY_INTEGERboolean
    char
    byte
    short
    int
    long
    DATEoracle.sql.DATE
    RAWoracle.sql.RAW
    BLOBoracle.sql.BLOB
    CLOBoracle.sql.CLOB
    BFILEoracle.sql.BFILE
    ROWIDoracle.sql.ROWID
    TIMESTAMPoracle.sql.TIMESTAMP
    TIMESTAMP WITH TIME ZONEoracle.sql.TIMESTAMPTZ
    TIMESTAMP WITH LOCAL TIME ZONEoracle.sql.TIMESTAMPLTZ

    На этом пока закончу, устранив из базы данных следы своих экспериментов:

    В следующий раз я собираюсь исследовать поведение статических переменных класса Java в контексте сеансов СУБД Oracle и поставить несколько других экспериментов с Java. А также разработать PL/SQL пакет-обертку для чтения и записи внешних файлов на базе стандартной библиотеки Java.

    Читать еще:  Java преобразовать строку в дату
    Ссылка на основную публикацию
    Adblock
    detector