Postgres smallint []转换为Java short []数组

问题描述

我在Postgresql中有一个数据库表,其中的列名为“数据”,并键入:smallint[]

我正在尝试将查询中的数据保存到Java short[]中,并且出现以下异常:

java.lang.classCastException:类[Ljava.lang.Integer;不能强制转换为类[I([Ljava.lang.Integer;和[我在加载程序'bootstrap'的模块java.base中)”“

我的实现:

String sql = "SELECT * FROM table"
res = executeQuery(stmt,temp);

        ArrayList<VO> vos = new ArrayList<>();
        while (res.next()) {
            VO vo = new VO();
            Array ar = res.getArray("data");
            // vo has a private member data : short[]
            vo.setData((short[]) ar.getArray());
        }

@ vo.setData((short[]) ar.getArray());引发异常,我试图在其中将java.sql.Array转换为short[]数组。

解决方法

从错误消息中

看来getArray返回了Integer[]。您必须将其手动转换为short[]

Integer[] arr = (Integer[]) ar.getArray();
short[] data = new short(arr.length);
for (int i = 0; i < arr.length; ++i) {
    data[i] = arr[i].shortValue();
}