如何从具有多行的 SQL 查询中获取非字符串数组字段
Posted
技术标签:
【中文标题】如何从具有多行的 SQL 查询中获取非字符串数组字段【英文标题】:How can i get non String Array field from SQL query with multiple rows 【发布时间】:2018-01-09 15:46:12 【问题描述】:我有带有 VALS DOUBLE ARRAY[2000] 字段的 SQL (HSQLDB) 表 我使用返回带有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()));
但看起来开销很大
有没有什么方法可以在不进行字符串转换或多个单行查询的情况下从 Array SQL 字段中获取数字?在调试器中 rs.getArray() 向我展示了一个完美的数字值 JDBCArray ARRAY[0.0E0,0.0E0,0.0E0,0.0E0,0.0E0 .... ]
【问题讨论】:
【参考方案1】:您不需要转换为字符串并返回。刚投:
List<Double> values = new ArrayList<Double>();
for (Object o: (Object[])array.getArray())
values.add((Double) o);
【讨论】:
【参考方案2】:试试下面的代码:
Double[] vals = Arrays.stream(array.getArray())
.map(Double::valueOf)
.toArray(Double[]::new);
【讨论】:
未解决的编译问题:数组类型中的方法流(T[])不适用于参数(对象)如果我将强制转换添加到 Double[],我会得到与开头相同的异常,如果我转换为 Object[] ,则得到未解决的编译问题:无法推断以上是关于如何从具有多行的 SQL 查询中获取非字符串数组字段的主要内容,如果未能解决你的问题,请参考以下文章