Как получить массив строк ResultSet?

У меня есть запрос, который попадает в таблицу со столбцом массива. Когда я обрабатываю свои записи, я хотел бы взять данные столбца массива и рассматривать его как строковый массив и захватить первое значение. Я предположил, что могу сделать следующее:

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

Но когда я это делаю, я получаю ошибку:

Ошибка: (34, 3) Kotlin: Неразрешенная ссылка. Ни один из следующих кандидатов не применим из-за несоответствия типа приемника: @InlineOnly открытый оператор inline fun <@OnlyInputTypes K, V> Map.get (key: Int): ??? Определенный в kotlin.collections @SinceKotlin публичный оператор fun MatchGroupCollection.get (имя: String): MatchGroup? определен в kotlin.text

getArray возвращает тип Array! поэтому я предположил, что могу получить доступ к значениям по индексу. Что мне нужно сделать для доступа к этому массиву значений?

Solutions Collecting From Web of "Как получить массив строк ResultSet?"

На самом деле 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?> 

или к желаемому типу напрямую, хотя в результате вы можете получить некоторые ClassCastException .

Чтобы оставаться в типе безопасности, вам может понадобиться нечто вроде

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

Это будет:

  • результат null если массив не содержит String s
  • результат null если массив пуст
  • результат в первой String если массив содержит String