如何从 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);
}
我有 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);
}