首页 > 解决方案 > Postgres smallint[] 转换成 java short[] 数组

问题描述

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

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

java.lang.ClassCastException: 类 [Ljava.lang.Integer; 不能转换为类 [I ([Ljava.lang.Integer; and [I are in module java.base of loader 'bootstrap')"

我的实现:

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[]数组。

标签: javasqlarrayspostgresqlclasscastexception

解决方案


从错误消息中,它似乎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();
}

推荐阅读