Spec-Zone .ru
спецификации, руководства, описания, API
След: JDBC (ТМ) Доступ к базе данных
Урок: Основы JDBC
Используя Объекты Массива
Домашняя страница > JDBC (ТМ) Доступ к базе данных > Основы JDBC

Используя Объекты Массива

Отметьте: MySQL и DB Java в настоящий момент не поддерживают ARRAY Тип данных SQL. Следовательно, никакой учебный пример JDBC не доступен, чтобы демонстрировать Array Тип данных JDBC.

Следующие темы затрагиваются:

Создание Объектов Массива

Используйте метод Connection.createArrayOf создать Array объекты.

Например, предположите, что Ваша база данных содержит названную таблицу REGIONS, который был создан и заполнен со следующими SQL-операторами; отметьте, что синтаксис этих операторов изменится в зависимости от Вашей базы данных:

create table REGIONS
    (REGION_NAME varchar(32) NOT NULL,
    ZIPS varchar32 ARRAY[10] NOT NULL,
    PRIMARY KEY (REGION_NAME));

insert into REGIONS values(
    'Northwest',
    '{"93101", "97201", "99210"}');
insert into REGIONS values(
    'Southwest',
    '{"94105", "90049", "92027"}');
Connection con = DriverManager.getConnection(url, props);
String [] northEastRegion = { "10022", "02110", "07399" };
Array aArray = con.createArrayOf("VARCHAR", northEastRegionnewYork);

База данных Oracle драйвер JDBC реализует java.sql.Array интерфейс с oracle.sql.ARRAY class.

Получение и Доступ к Значениям Массива в ResultSet

Как с JDBC 4.0 больших интерфейса объекта (Blob, Clob, NClob), можно управлять Array объекты, не имея необходимость приносить все их данные с сервера базы данных на Ваш клиентский компьютер. Array объект осуществляет SQL ARRAY это представляет или как набор результатов или как массив Java.

Следующая выборка получает SQL ARRAY значение в столбце ZIPS и присваивает это java.sql.Array объект z объект. Выборка получает содержание z и хранилища это в zips, массив Java, который содержит объекты типа String. Выборка выполняет итерации через zips массив и проверки, что каждое почтовое (zip) код допустимо. Этот код предполагает что class ZipCode был определен ранее с методом isValid возврат true если данный почтовый индекс соответствует один из почтовых индексов в основном списке допустимых почтовых индексов:

ResultSet rs = stmt.executeQuery(
    "SELECT region_name, zips FROM REGIONS");

while (rs.next()) {
    Array z = rs.getArray("ZIPS");
    String[] zips = (String[])z.getArray();
    for (int i = 0; i < zips.length; i++) {
        if (!ZipCode.isValid(zips[i])) {
            // ...
            // Code to display warning
        }
    }
}

В следующем операторе, ResultSet метод getArray возвращает значение, сохраненное в столбце ZIPS из текущей строки как java.sql.Array объект z:

Array z = rs.getArray("ZIPS");

Переменная z содержит локатор, который является логическим указателем на SQL ARRAY на сервере; это не содержит элементы ARRAY непосредственно. Будучи логическим указателем, z может использоваться, чтобы управлять массивом на сервере.

В следующей строке, getArray Array.getArray метод, не ResultSet.getArray метод используется в предыдущей строке. Поскольку Array.getArray метод возвращается Object в языке программирования Java и потому что каждый почтовый индекс является a String объект, результат бросается массиву String объекты прежде, чем быть присвоенным переменной zips.

String[] zips = (String[])z.getArray();

Array.getArray метод осуществляет SQL ARRAY элементы на клиенте как массив String объекты. Поскольку, в действительности, переменная zips содержит элементы массива, возможно выполнить итерации через zips в a for цикл, ища почтовые индексы, которые не допустимы.

Хранение и Обновление Объектов Массива

Используйте методы PreparedStatement.setArray и PreparedStatement.setObject передать Array оцените как входной параметр a PreparedStatement объект.

Следующий пример устанавливает Array объект northEastRegion (создаваемый в предыдущем примере) как второй параметр к PreparedStatement pstmt:

PreparedStatement pstmt = con.prepareStatement(
    "insert into REGIONS (region_name, zips) " + "VALUES (?, ?)");
pstmt.setString(1, "NorthEast");
pstmt.setArray(2, northEastRegion);
pstmt.executeUpdate();

Точно так же используйте методы PreparedStatement.updateArray и PreparedStatement.updateObject обновить столбец в таблице с Array значение.

Высвобождение Средств Массива

Array объекты остаются допустимыми для, по крайней мере, продолжительности транзакции, в которой они создаются. Это могло потенциально привести к приложению, исчерпывающему ресурсы во время длинной рабочей транзакции. Приложения могут выпустить Array ресурсы, вызывая их free метод.

В следующей выборке, методе Array.free вызывается, чтобы высвободить средства, сохраненные на ранее создаваемый Array объект.

Array aArray = con.createArrayOf("VARCHAR", northEastRegionnewYork);
// ...
aArray.free();

Проблемы с примерами? Попытайтесь Компилировать и Выполнить Примеры: FAQ.
Жалобы? Поздравление? Предложения? Дайте нам свою обратную связь.

Предыдущая страница: Используя Объекты SQLXML
Следующая страница: Используя ОТЛИЧНЫЙ Тип данных