0

我有一个查询正在访问具有数组列的表。当我处理我的记录时,我想获取数组列的数据并将其视为字符串数组并获取第一个值。我以为我可以做到以下几点:

while (resultSet.next()) {
    val clients = resultSet.getArray("clients")
    println(clients[0])
}

但是当我这样做时,我得到了错误:

错误:(34, 3) Kotlin:未解析的引用。由于接收器类型不匹配,以下候选都不适用:@InlineOnly public operator inline fun <@OnlyInputTypes K, V> Map.get(key: Int): ??? 在 kotlin.collections 中定义 @SinceKotlin 公共运算符 fun MatchGroupCollection.get(name: String): MatchGroup? 在 kotlin.text 中定义

getArray返回类型Array!,所以我假设我可以通过索引访问值。我必须做什么才能访问这个值数组?

4

1 回答 1

5

实际上,getArray返回一个java.sql.Array.

这与kotlin.Array类型不同。

您可以getArray在 上使用java.sql.Array,它会array在 Kotlin 中简单地翻译成:

resultSet.getArray("clients").array

将实际数组作为Object/ Any

您可以将其转换为Array<out Any?>

val arr = resultSet.getArray("clients").array as Array<out Any?>

或直接转换为所需的类型,尽管您可能会得到一些ClassCastExceptions 结果。

为了保持类型安全,您可能需要类似的东西

val firstClient = (resultSet.getArray("clients").array as? Array<out Any?>)
        ?.filterIsInstance<String>()
        ?.firstOrNull()

这将:

  • 结果null如果数组不包含Strings
  • 结果null如果数组为空
  • String如果数组包含一个String
于 2017-11-30T18:52:23.577 回答