【问题标题】:How can i get non String Array field from SQL query with multiple rows如何从具有多行的 SQL 查询中获取非字符串数组字段
【发布时间】: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 .... ]

【问题讨论】:

    标签: java sql arrays hsqldb


    【解决方案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[] ,则得到未解决的编译问题:无法推断 map(Function super T,? extends R>) 的类型参数
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-26
      • 2012-07-27
      • 2017-08-22
      • 2016-08-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多