Sql array type java
Retrieves the contents of the SQL ARRAY value designated by this Array object in the form of an array in the Java programming language.
Retrieves a slice of the SQL ARRAY value designated by this Array object, beginning with the specified index and containing up to count successive elements of the SQL array.
Retreives a slice of the SQL ARRAY value designated by this Array object, beginning with the specified index and containing up to count successive elements of the SQL array.
Retrieves a result set that contains the elements of the SQL ARRAY value designated by this Array object.
Retrieves a result set holding the elements of the subarray that starts at index index and contains up to count successive elements.
Retrieves a result set holding the elements of the subarray that starts at index index and contains up to count successive elements.
Retrieves a result set that contains the elements of the SQL ARRAY value designated by this Array object.
Method Detail
getBaseTypeName
String getBaseTypeName() throws SQLException
Retrieves the SQL type name of the elements in the array designated by this Array object. If the elements are a built-in type, it returns the database-specific type name of the elements. If the elements are a user-defined type (UDT), this method returns the fully-qualified SQL type name.
getBaseType
getArray
Object getArray() throws SQLException
Retrieves the contents of the SQL ARRAY value designated by this Array object in the form of an array in the Java programming language. This version of the method getArray uses the type map associated with the connection for customizations of the type mappings. Note: When getArray is used to materialize a base type that maps to a primitive data type, then it is implementation-defined whether the array returned is an array of that primitive data type or an array of Object .
getArray
Object getArray(MapString,Class> map) throws SQLException
Retrieves the contents of the SQL ARRAY value designated by this Array object. This method uses the specified map for type map customizations unless the base type of the array does not match a user-defined type in map , in which case it uses the standard mapping. This version of the method getArray uses either the given type map or the standard mapping; it never uses the type map associated with the connection. Note: When getArray is used to materialize a base type that maps to a primitive data type, then it is implementation-defined whether the array returned is an array of that primitive data type or an array of Object .
getArray
Object getArray(long index, int count) throws SQLException
Retrieves a slice of the SQL ARRAY value designated by this Array object, beginning with the specified index and containing up to count successive elements of the SQL array. This method uses the type map associated with the connection for customizations of the type mappings. Note: When getArray is used to materialize a base type that maps to a primitive data type, then it is implementation-defined whether the array returned is an array of that primitive data type or an array of Object .
getArray
Object getArray(long index, int count, MapString,Class> map) throws SQLException
Retreives a slice of the SQL ARRAY value designated by this Array object, beginning with the specified index and containing up to count successive elements of the SQL array. This method uses the specified map for type map customizations unless the base type of the array does not match a user-defined type in map , in which case it uses the standard mapping. This version of the method getArray uses either the given type map or the standard mapping; it never uses the type map associated with the connection. Note: When getArray is used to materialize a base type that maps to a primitive data type, then it is implementation-defined whether the array returned is an array of that primitive data type or an array of Object .
getResultSet
ResultSet getResultSet() throws SQLException
Retrieves a result set that contains the elements of the SQL ARRAY value designated by this Array object. If appropriate, the elements of the array are mapped using the connection’s type map; otherwise, the standard mapping is used. The result set contains one row for each array element, with two columns in each row. The second column stores the element value; the first column stores the index into the array for that element (with the first array element being at index 1). The rows are in ascending order corresponding to the order of the indices.
getResultSet
ResultSet getResultSet(MapString,Class> map) throws SQLException
Retrieves a result set that contains the elements of the SQL ARRAY value designated by this Array object. This method uses the specified map for type map customizations unless the base type of the array does not match a user-defined type in map , in which case it uses the standard mapping. This version of the method getResultSet uses either the given type map or the standard mapping; it never uses the type map associated with the connection. The result set contains one row for each array element, with two columns in each row. The second column stores the element value; the first column stores the index into the array for that element (with the first array element being at index 1). The rows are in ascending order corresponding to the order of the indices.
getResultSet
ResultSet getResultSet(long index, int count) throws SQLException
Retrieves a result set holding the elements of the subarray that starts at index index and contains up to count successive elements. This method uses the connection’s type map to map the elements of the array if the map contains an entry for the base type. Otherwise, the standard mapping is used. The result set has one row for each element of the SQL array designated by this object, with the first row containing the element at index index . The result set has up to count rows in ascending order based on the indices. Each row has two columns: The second column stores the element value; the first column stores the index into the array for that element.
getResultSet
ResultSet getResultSet(long index, int count, MapString,Class> map) throws SQLException
Retrieves a result set holding the elements of the subarray that starts at index index and contains up to count successive elements. This method uses the specified map for type map customizations unless the base type of the array does not match a user-defined type in map , in which case it uses the standard mapping. This version of the method getResultSet uses either the given type map or the standard mapping; it never uses the type map associated with the connection. The result set has one row for each element of the SQL array designated by this object, with the first row containing the element at index index . The result set has up to count rows in ascending order based on the indices. Each row has two columns: The second column stores the element value; the first column stores the index into the array for that element.
free
This method frees the Array object and releases the resources that it holds. The object is invalid once the free method is called. After free has been called, any attempt to invoke a method other than free will result in a SQLException being thrown. If free is called multiple times, the subsequent calls to free are treated as a no-op.
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2023, Oracle and/or its affiliates. All rights reserved. Use is subject to license terms. Also see the documentation redistribution policy.
Использование Java массивов для вставки, получения и изменения PostgreSQL массивов
Массивы являются мощным средством программирования, часто используемом разработчиками, как в Java так и PL / PgSQL. Интерфейсы потенциально могут стать сложнее, например, когда два из них пытаются и общаются друг другом. В этом разделе рассматривается, как можно написать простой код, который использует java.sql.Array интерфейс для вставки, извлечения, и обновления массивов в PostgreSQL.
Чтобы продемонстрировать этот функционал, давайте создадим простую таблицу, которая хранит названия стран в одной колонке в виде текста, и список каких-то городов, принадлежащих этой стране во второй колонке в виде текстового массива.
CREATE TABLE city_example ( country TEXT, cities TEXT[] );
Теперь мы будем использовать JDBC интерфейс для добавления, получения и изменения данных в этой таблице.
Вставка массивов
Любой, кто знаком с Java, использовал массивы в том, или ином виде. Перед тем, как эти массивы будут храниться в PostgreSQL, они должны быть преобразованы в интерфейс, предоставленный в пакете java.sql package … Array.
JDBC драйвер предоставляет функции, которые позволяют приводить Java массивы к соответствующим им PostgreSQL массивам. Преобразование специфично для каждой конкретной базы данных и определено в PostgreSQL’ом org.postgresql.jdbc2.TypeInfoCache файле. Кроме того, важно отметить, что преобразование чувствительно к регистру. К примеру, “INTEGER” — это не то же самое, что “integer”.
В нижеследующем коде, функция createArrayOf Connection интерфейса использована для конвертации строчных Java массивов в текстовые PostgreSQL массивы перед вставкой.
try < String[] usa = ; String[] canada = ; String[] uk = ; /* Convert String[] to java.sql.Array using JDBC API */ Array arrayUSA = conn.createArrayOf("text", usa); Array arrayCanada = conn.createArrayOf("text", canada); Array arrayUK = conn.createArrayOf("text", uk); String sql = "INSERT INTO city_example VALUES (?, ?)"; PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setString(1, "USA"); pstmt.setArray(2, arrayUSA); pstmt.executeUpdate(); pstmt.setString(1, "Canada"); pstmt.setArray(2, arrayCanada); pstmt.executeUpdate(); pstmt.setString(1, "UK"); pstmt.setArray(2, arrayUK); pstmt.executeUpdate(); conn.commit(); > catch (Exception e)
Пожалуйста обратите внимание, что тип данных, определенный в Connection.createArrayOf, должен быть типом данных PostgreSQL, не java.sql.Types. JDBC драйвер смотрит на тип данных в момент запуска для создания java.sql.Array объекта.
Этот код, при выполнении, возвращает следующие данные в таблицу city_example:
select * from city_example ; country | cities ---------+-------------------------------------- USA | Canada | UK | (3 rows)
Получение массивов
Процесс получения массивов — это полностью обратный процессу их вставки процесс. В нижеследующем примере, первый шаг — это получение ResultSet с необходимыми данными, а второй — преобразование PostgreSQL текстового массива в строчный массив Java.
try < String sql = "SELECT * FROM city_example"; PreparedStatement ps = conn.prepareStatement(sql); ResultSet rs = ps.executeQuery(); while(rs.next()) < System.out.println("Country: " + rs.getString(1)); System.out.println("---------------"); Array cities = rs.getArray(2); String[] str_cities = (String[])cities.getArray(); for (int i=0; iSystem.out.println(""); > > catch (Exception e)
Для этого кода, вывод в stdout следующий:
Country: USA --------------- New York Chicago San Francisco
Country: Canada --------------- Montreal Toronto Vancouver
Country: UK --------------- London Birmingham Oxford
Изменение массивов
Процесс изменения массивов в PostgreSQL довольно близок к процессу их вставки. В нижеследующем коде, новый набор городов США объявлен как Java строчный массив, который потом преобразуется в PostgreSQL текстовый массив перед вставкой в существующую строку.
try < String[] usa = ; Array arrayUSA = conn.createArrayOf("text", usa); String sql = "UPDATE city_example SET cities = ? WHERE country = 'USA'"; PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setArray(1, arrayUSA); pstmt.executeUpdate(); conn.commit(); > catch (Exception e)
После выполнения этого кода, база выглядит следующим образом:
select * from city_example ; country | cities ---------+---------------------------------------------------- Canada | UK | USA | (3 rows)