将 PgArray 或 java.sql.Array 转换为 Scala 集合
Cast PgArray or java.sql.Array to a Scala collection
我有一个 postgres 查询,它使用 array_agg()
函数来 return 一个 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
。
解析由 psql array_agg
函数产生的字段的正确方法是什么?
我能够在 postgres 查询中使用 json_agg
代替 array_agg
,然后执行:
resultSet.getString("array_agg_column_name")
在这里,您可以随心所欲。我们使用 Circe 将 Json 解码为 Scala 对象。
您仍然可以将其转换为 Array[AnyRef]
并通过遍历数组将其转换为另一种类型。
val arrayCol = resultSet.getArray("array_agg_column_name")
.getArray().asInstanceOf[Array[AnyRef]]
val ans = arrayCol.map(i => i.asInstanceOf[Int])
我有一个 postgres 查询,它使用 array_agg()
函数来 return 一个 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
。
解析由 psql array_agg
函数产生的字段的正确方法是什么?
我能够在 postgres 查询中使用 json_agg
代替 array_agg
,然后执行:
resultSet.getString("array_agg_column_name")
在这里,您可以随心所欲。我们使用 Circe 将 Json 解码为 Scala 对象。
您仍然可以将其转换为 Array[AnyRef]
并通过遍历数组将其转换为另一种类型。
val arrayCol = resultSet.getArray("array_agg_column_name")
.getArray().asInstanceOf[Array[AnyRef]]
val ans = arrayCol.map(i => i.asInstanceOf[Int])