首页 > 解决方案 > 将 PgArray 或 java.sql.Array 转换为 Scala 集合

问题描述

我有一个 postgres 查询,它使用该array_agg()函数返回一个 PgArray 值。用一个简单的方法运行这个查询,java.sql.PreparedStatement我得到一个java.sql.ResultSet.

val arrayCol = resultSet.getArray("array_agg_column_name")我有一个java.sql.Array

打印 arrayCol 看起来像

{1, 2, 3}

打电话arrayCol.getArray给我一个Object

我不确定如何在我的 Scala 代码中使用 Object 或 java.sql.Array 类型。做一个简单的asInstanceOf[List[Int]]失败

java.lang.ClassCastException: [Ljava.lang.Integer; cannot be cast to scala.collection.immutable.List

而套管与asInstanceOf[Array[Int]]导致

java.lang.ClassCastException: [Ljava.lang.Integer; cannot be cast to [I

如果我import scala.collection.JavaConverters._

然后尝试使用asScala我得到

value asScala is not a member of Object

或“... of java.sql.Array”,取决于我是否调用getArray.

array_agg解析由 psql函数产生的字段的正确方法是什么?

标签: javascalacastingpsql

解决方案


您仍然可以Array[AnyRef]通过遍历数组将其转换为另一种类型。

val arrayCol = resultSet.getArray("array_agg_column_name")
.getArray().asInstanceOf[Array[AnyRef]]

val ans = arrayCol.map(i => i.asInstanceOf[Int])

推荐阅读