我有一个查询,它正在访问一个具有数组列的表。 当我处理我的记录时,我想获取数组列的数据并将其视为字符串数组并获取第一个值。 我以为我可以做到以下几点:
while (resultSet.next()) {
val clients = resultSet.getArray("clients")
println(clients[0])
}
但是当我这样做时,我得到错误:
错误:(34, 3) Kotlin:未解析的引用。以下均不具备以下任何一项 由于接收器类型不匹配,候选者适用: @InlineOnly公共运营商内联乐趣<@OnlyInputTypes K,V> Map.get(key: Int): ???在 Kotlin.collections 中定义 @SinceKotlin公共运营商趣味MatchGroupCollection.get(名称: 字符串):匹配组?在 Kotlin.text 中定义
getArray
返回类型Array!
,所以我假设我可以按索引访问值。 我必须做什么才能访问此值数组?
实际上,getArray
返回一个java.sql.Array
。
这与kotlin.Array
类型不同。
您可以在java.sql.Array
上使用getArray
,只需将其转换为 Kotlin 中的array
:
resultSet.getArray("clients").array
将实际数组作为Object
/Any
获取。
您可以将其转换为Array<out Any?>
:
val arr = resultSet.getArray("clients").array as Array<out Any?>
或直接到所需的类型,尽管您可能会因此获得一些ClassCastException
。
为了保持类型安全,您可能需要类似
val firstClient = (resultSet.getArray("clients").array as? Array<out Any?>)
?.filterIsInstance<String>()
?.firstOrNull()
这将:
- 如果数组不包含
String
秒,则导致null
- 如果数组为空,则导致
null
- 如果数组包含
String
则在第一个String
中生成
结果