Intereting Posts
Разбор json в Java Pojos с Gson из Kotlin отсутствует общая информация Json to Kotlin Класс данных Вызов метода с нулевым параметром Что такое idomatic способ обновления с использованием RxBinding на SwipeRefreshLayout Обновление коллекционных виджета RemoteViews после обратного вызова AsyncTask Android – Невозможно добавить банку, созданную в java8 с kotlin Почему не будет код, который инициализирует свойство интерфейса переменной в компиляции блока init? Каково поведение Iterable # all & Why Kotlin Char :: class.java! = Char.javaClass Объясните, почему показано предупреждение. Не отмечен ли источник-источник.readArrayList (data !!. JavaClass.classLoader) как ArrayList <Data>? Я хочу открывать файлы из папок Почему Guice не находит привязку List <Interface>? Настройка прокладки программно и через xml Определить возвращаемый тип Retrofit с использованием интерфейса вместо класса Kotlin Reflection – проверка наличия свойства Передача функций в Котлин

Как получить массив строк 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