Complex SQL Data Types

The connector supports the complex SQL data types ARRAY, MAP, and ROW. Nested complex data types are also supported, such as ARRAY[MAP] or ROW(ARRAY [INTEGER]).

Data stored in these types can also be bound in prepared statements.

For example, to pass ARRAY data in a prepared statement, use the following syntax:

Array intArray = connection.createArrayOf("SQL_INTEGER", new Integer[]{5,6});

preparedStatement.setArray(i, intArray);

As another example, to pass MAP data in a prepared statement, use the following syntax:

HashMap<Integer, Long> hmap = new HashMap<>();

hmap2.put(3, (long) 5);

hmap2.put(4, (long) 6);

preparedStatement.setObject(1, hmap, Types.JAVA_OBJECT);

And as another example, to pass ROW data in a prepared statement for the following query:

INSERT INTO hive.default.rowtable VALUES ROW(CAST(ROW(REAL '2.3', DOUBLE '4.9') AS ROW(x REAL, y DOUBLE)))"

Use the following syntax:

LinkedHashMap<Object, Object> linkedHashMap = new LinkedHashMap<>();

linkedHashMap.put("x", (float)2.3);

linkedHashMap.put("y", 4.9);

preparedStatement = connection.prepareStatement("insert into hive.default.rowtable values row(?)");

preparedStatement.setObject(1, lhmp, Types.JAVA_OBJECT);