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

тип java.math.BigDecimal, в котором могут храниться числа с плавающей

точкой с произвольной точностью.

В дополнение к этим типам можно использовать для представления чисел

один из расширенных типов JDBC Oracle. Он называется oracle.sql.

NUMBER и используется для хранения чисел с точностью до 38 разрядов. Вы

ознакомитесь с типом oracle, sql. NUMBER далее в этой главе. В базе данных

Oracle 10g и выше вы можете использовать типы oracle, sql. BINARY_FLOAT

и oracle, sql. BINARY_DOUBLE. Эти типы позволяют вам хранить числа BINARY_

FLOAT и BINARY_DOUBLE. - '

Рассмотрим несколько примеров использования этих целых типов и

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

price для строки, выбранной из таблицы products. Предположим, что объект

ResultSet с именем productResultSet был заполнен столбцами product_

idnpriceflaa строки, отобранной из таблицы products. Столбец product_id

определен в базе данных как INTEGER, а столбец price - как NUMBER. В следующем

примере создаются переменные различных целых типов и типов с

плавающей точкой и производится выборка значений столбцов product_id

и price в эти переменные:

□ short productldShort = productResultSet.getShort(«product_id»);

int productldlnt =productResultSet.getInt(“product_id” );

long productldLong = productResultSet.getLong(“product_id” );

flo at priceFloat = productResultSet.getFloat(“price” );

double priceDouble = productResultSet.getDouble(“price” );

java.math.BigDecimal priceBigDec = productResultSet.

getBigDecimal(“price” );

Обратите внимание на использование различных методов get для получения

значений столбцов как разных типов, выходные данные которых

записываются в переменные java подходящего типа.

Обработка пустых значений базы данных

Столбец базы данных может быть определен как NULL или NOT NULL. Значение

NULL указывает на то, что в столбце могут содержаться пустые значения,

а NOT NULL - на то, что в столбце не могут содержаться значения NULL.

Значение NULL означает, что настоящее значение столбца неизвестно. При

создании таблицы базы данных, если не указано ни NULL, ни NOT NULL, база

данных полагает, что выбрано значение NULL.

568 Глава 15

Такие типы объектов Java, как String, могут использоваться для хранения

значений NULL базы данных. Когда оператор SELECT используется для

выборки значений из столбца, который содержит значения NULL, в объект

java String, в этот объект будет записано значение java NULL. Например,

столбец phone (определенный как VARCHAR2) для покупателя № 5 равен

NULL, и следующий оператор использует метод getStringQ для чтения этого

значения в String с именем phone:

П phone = customerResultSet.getString(«phone»);

После выполнения этого оператора объект Java String по имени phone

будет содержать значение NULL.

Этот метод работает для значений NULL, которые хранятся в объектах

Java. Но как быть с числовыми, логическими и битовыми типами Java? Если

вы выбираете значение NULL в числовую, логическую или битовую переменную

Java (например, в один из типов int, float, Boolean или byte), эти

переменные будут содержать значение «ноль». Для базы данных значения

NULL и ноль - это разные значения: ноль это вполне определенное значение,

a NULL означает, что значение не определено. Это приводит к проблеме,

если вы хотите и в. Java-программе проводить различие между этими

двумя значениями.

Есть два способа обойти эту проблему.

■ Можно в ResultSet использовать метод wasNull(). Этот метод возвращает

значение true, если отобранное из базы значение было NULL; в

противном случае метод возвращает значение false.

■ Можно использовать интерфейсный класс (wrapper class). Интерфейсный

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

будет храниться значение столбца, отобранное из базы данных.

Интерфейсный объект хранит значения NULL базы данных как значения

null Java, а не пустые значения (non-NULL) - как обычные значения.

Ниже приведен пример, иллюстрирующий применение первого метода

для товара № 12 из таблицы products. В этой строке столбец product_id

имеет значение NULL, а определен столбец базы данных как INTEGER. Предположим

также, что объект ResultSet по имени productResultSet был заполнен

значениями столбцов product_id и product_type_id для товара № 12 из

таблицы products. Следующий пример использует метод wasNULL() для

проверки, было ли прочитанное для столбца product_type_id значение пустым

(NULL):

□ System.out.println(«product_type_id = « +

productResultSet.getInt(“product_type_id” ));

I f (productResultSet.wasNullO) {

System.out.println(“ Last value read was NULL” );

}

Поскольку столбец product_type_id содержит значение NULL, метод

wasNULL() возвратит значение true, так что будет выведена строка «Last

value read was NULL».

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