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, содержит целый ряд методов установки, которые могут
быть использованы для задания значений столбцов с использованием объектов