我有一个查询,该查询命中具有数组列的表。在处理记录时,我想获取数组列的数据并将其视为字符串数组并获取第一个值。我以为我可以做以下事情:
while (resultSet.next()) {
val clients = resultSet.getArray("clients")
println(clients[0])
}
但是当我这样做时,我得到了错误:
错误:(34,3)Kotlin:未解决的参考。以下都不是
候选者由于接收者类型不匹配而适用:
@InlineOnly公共运算符内联有趣 Map.get(key:Int):???在kotlin.collections中定义
@SinceKotlin公共运算符fun MatchGroupCollection.get(name:
字符串):MatchGroup?在kotlin.text中定义
getArray
返回类型Array!
,所以我假设我可以按索引访问值。我需要做什么才能访问此值数组? 最佳答案
实际上,getArray
返回一个java.sql.Array
。
这与kotlin.Array
类型不同。
您可以使用getArray
on the java.sql.Array
,在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()
这将:
如果数组不包含
null
,则结果为String
如果数组为空,则结果为
null
如果数组包含
String
,则导致第一个String