跳到主要内容

8.8 数组类型处理器

数组类型处理器位于 net.hasor.dbvisitor.types.handler.array 包中。

类型处理器Java 类型作用
ArrayTypeHandler输入 java.sql.Array 或对象数组,输出 Java 数组通过 getArray/setArray 读写,读取后释放 SQL Array
PgArrayTypeHandler输入 java.sql.Array 或对象数组,输出 Object[]显式指定 PostgreSQL 元素类型

向量字段配置见向量类型处理器。

警告

ArrayTypeHandler 接受对象数组和 int[] 等基础类型数组,基础类型元素会自动装箱。PgArrayTypeHandler 接受 Integer[] 等对象数组,不接受基础类型数组。向量参数的绑定见 Milvus 参数绑定。

通用 ArrayTypeHandler 读取非空的 Double 元素数组时会转成 Float 数组;需要保留双精度时,请直接使用 JDBC getArray() 并自行转换,或配置专用处理器。调用者提供的 SQL Array 由调用者负责 free()。

数组元素类型映射​

在创建 java.sql.Array 类型时需要指定元素类型,例如:

Array array = ps.getConnection().createArrayOf(typeName, ...);

数组中的元素 Java 类型所对应的 JDBC 类型为下表所示:

数组元素类型对应的 JDBC 类型
boolean.classJDBCType.BOOLEAN
Boolean.classJDBCType.BOOLEAN
byte.classJDBCType.TINYINT
Byte.classJDBCType.TINYINT
short.classJDBCType.SMALLINT
Short.classJDBCType.SMALLINT
int.classJDBCType.INTEGER
Integer.classJDBCType.INTEGER
long.classJDBCType.BIGINT
Long.classJDBCType.BIGINT
float.classJDBCType.FLOAT
Float.classJDBCType.FLOAT
double.classJDBCType.DOUBLE
Double.classJDBCType.DOUBLE
Calendar.classJDBCType.CHAR
char.classJDBCType.CHAR
java.util.Date.classJDBCType.TIMESTAMP
java.sql.Date.classJDBCType.TIMESTAMP
java.sql.Timestamp.classJDBCType.TIMESTAMP
java.sql.Time.classJDBCType.TIMESTAMP
Instant.classJDBCType.TIMESTAMP
LocalDateTime.classJDBCType.TIMESTAMP
LocalDate.classJDBCType.TIMESTAMP
LocalTime.classJDBCType.TIMESTAMP
ZonedDateTime.classJDBCType.TIMESTAMP
JapaneseDate.classJDBCType.TIMESTAMP
YearMonth.classJDBCType.TIMESTAMP
Year.classJDBCType.TIMESTAMP
Month.classJDBCType.TIMESTAMP
OffsetDateTime.classJDBCType.TIMESTAMP
OffsetTime.classJDBCType.TIMESTAMP
String.classJDBCType.VARCHAR
BigInteger.classJDBCType.BIGINT
BigDecimal.classJDBCType.NUMERIC
Byte[].classJDBCType.VARBINARY
byte[].classJDBCType.VARBINARY
URL.classJDBCType.DATALINK
URI.classJDBCType.DATALINK