如何获取ResultSet字符串数组?

时间:2017-11-30 17:58:03

标签: java kotlin crate

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

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公共运营商乐趣MatchGroupCollection.get(名称:   字符串):MatchGroup?在kotlin.text中定义

getArray返回类型Array!,所以我假设我可以按索引访问值。如何访问此数组值?

1 个答案:

答案 0 :(得分:4)

实际上,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 s ,则
  • 会导致String 如果数组为空,
  • 会导致null
  • 如果数组包含String ,则
  • 会产生第一个String