Выбрать главу

d e s c r ip t io n = Test product

p r ice = 19.95

586 Глава 15

product_id = 14

product_type_id = 1

name = Test product

d e s c r ip t io n = Test product

p r ic e = 19.95

product_id = 15

product_type_id = 1

name = Test product

d e s c r ip t io n = Test product

p r ic e = 19.95

product_id = 16

product_type_id = 1

name = Test product

d e s c r ip t io n = Test product

p r ic e = 19.95

product_id = 17

product_type_id = 1

name = Test product

d e s c r ip t io n = Test product

p r ic e = 19.95

Расширения Oracle для JDBC

Расширения Oracle для JDBC содержат пакеты и интерфейсы, позволяющие

получать доступ ко всем типам данных, предоставляемым Oracle, и

обеспечивают повышение производительности при работе с базой данных

Oracle. В этом разделе показано, как манипулировать строками, числами,

датами и идентификаторами строк. Ознакомиться со всеми типами

Oracle и способами повышения производительности можно в моей книге

“Программирование JDBC для Oracle9i” .

Есть два пакета расширений JDBC, поставляемых Oracle:

■ oracle.sql Содержит классы, поддерживающие все типы базы данных

Oracle;

■ oracle.jdbc Содержит интерфейсы, поддерживающие доступ к базе

данных Oracle.

Чтобы импортировать пакеты JDBC Oracle в Java-программы, можно

добавить в текст программы следующие строки:

□ import o r a c l e . s q l . *;

import o r a c le . jd b c .*;

Необязательно импортировать все пакеты; можно импортировать

только те классы и интерфейсы, которые фактически используются в вашей

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

пакетов oracle.sql и oracle.jdbc.

Пакет oracle.sql

Пакет oracle.sql содержит классы, поддерживающие все типы Oracle. Использование

объектов классов, определенных в этом пакете, более эффективно,

чем обычных объектов Java. Это связано с тем, что отпадает необ-

Выполнение SQL с использованием Java 587

ходимость сначала конвертировать значения столбцов в соответствующий

базовый тип Java. Кроме того, использование типов Java float или double

для представления чисел с плавающей точкой может привести к потере

точности. Если вы будете использовать для представления чисел объект

oracle.sql.NUMBER, то для ваших чисел никогда не произойдет потери

точности.

Совет При написании программы, которая перемещает в базе данных большие объемы

данных, нужно использовать классы oracle.sql.*.

Все типы классов oracle.sql.* расширяют класс oracle.sql.Datum, который

содержит функциональные возможности, являющиеся общими для

всех классов. В таблице 15.6 показано подмножество классов oracle.sql

вместе с отображениями на совместимые типы базы данных Oracle.

Таблица 15.6. Классы и совместимые типы базы данных Oracle

Класс Совместимый тип базы данных Oracle

oracle.sql.NUMBER INTEGER

NUMBER

oracle.sql.CHAR CHAR

VARCHAR2

NCHAR

NVARCHAR2

oracle.sql.DATE DATE

oracle.sql.BINARY_FLOAT BINARY_FLOAT

oracle.sql.BINARY_DOUBLE BINARY JIOUBLE

oracle.sql.ROWID ROWID

Из таблицы 15.6 видно, что объект о racle. s q l. NUMBER совместим со столбцами

базы данных, определенными с использованием типов INTEGER и

NUMBER, а столбец типа VARCHAR2 совместив с объектом oracle.sql.CHAR.

Объект oracle, sql. CHAR совместим также с типами базы данных NCHAR и

NVARCHAR2. Эти типы позволяют хранить в базе данных многобайтовые наборы

символов.

Объекты, объявленные с использованием классов oracle.sql.*, хранят

данные в виде массива байтов (известного как формат SQL) и не переформатируют

данные, полученные из базы данных. Это означает, что не происходит

потери информации при конвертировании данных в базовые типы

Java.

В каждом таком классе есть метод getByte(), который возвращает двоичные

данные, хранящиеся в объекте oracle.sql, как массив байтов, и метод

tojdbc (), возвращающий двоичные данные как совместимые типы Java.

Единственным исключением из этого правила является метод oracle.sql.

ROWID.toJdbcQ, который возвращает только oracle.sql.ROWID.

588 Глава 15

В каждом классе также есть метод для конвертирования данных из формата

SQL в базовые типы Java. Например, st ringValue() возвращает значение

String Java, intValueO - int J a v a , floatValue() возвращает float,

doubleValue() -double, BigDecimalValue() B03BpaiaaeTjava.math.BigDecimal,

dateValue() -java.sql.Date и т. д. Эти методы можно использовать, если нужно

хранить данные формата SQL в одном из базовых типов Java или вывести

эти данные на экран. Каждый класс oracle.sql также содержит конструктор,

который принимает на входе переменную, объект или байтовый массив

Java.

Как вы увидите далее, класс OraclePreparedStatement, определенный в

пакете oracle.jdbc, содержит целый ряд методов установки, которые могут

быть использованы для задания значений столбцов с использованием объектов