Spec-Zone .ru
спецификации, руководства, описания, API
|
Отметьте: 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.
Как с 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();