如何从 SQL 多行查询中获取非字符串数组字段

How can i get non String Array field from SQL query with multiple rows

我有 SQL (HSQLDB) table 和 VALS DOUBLE ARRAY[2000] 字段 我使用 returns 多行带有 VALS 字段的查询 如果我尝试获取数组

Array array = rs.getArray("VALS");
Double[] vals = (Double[]) array.getArray();

我得到

java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.Double;

我可以通过从 Object 到 String 的双重转换获得值,然后将 String 解析为 Double,例如:

List<Double> values = new ArrayList<Double>();
for (Object o: (Object[])array.getArray()) {
    values.add(Double.parseDouble(o.toString()));
}

但看起来开销很大

有没有办法在不进行字符串转换或多个单行查询的情况下从数组 SQL 字段中获取数字?在调试器中 rs.getArray() 向我展示了一个完美的 JDBCArray 数字值 ARRAY[0.0E0,0.0E0,0.0E0,0.0E0,0.0E0 .... ]

试试下面的代码:

Double[] vals = Arrays.stream(array.getArray()) .map(Double::valueOf) .toArray(Double[]::new);

您不需要转换为 String 并返回。刚投:

List<Double> values = new ArrayList<Double>(); 
for (Object o: (Object[])array.getArray()) {
    values.add((Double) o); 
}