Обработка набора результатов SQL как потока Scala

Когда я запрашиваю базу данных и получаю обратно (только для пересылки, только для чтения) ResultSet, ResultSet действует как список строк базы данных.

Я пытаюсь найти способ обращаться с этим ResultSet как со Scala Stream. Это позволит выполнять такие операции, как filter, mapи т. д., при этом не потребляя больших объемов оперативной памяти.

Я реализовал метод хвостовой рекурсии для извлечения отдельных элементов, но для этого требуется, чтобы все элементы находились в памяти одновременно, что является проблемой, если ResultSet очень велик:

// Iterate through the result set and gather all of the String values into a list
// then return that list
@tailrec
def loop(resultSet: ResultSet,
         accumulator: List[String] = List()): List[String] = {
  if (!resultSet.next) accumulator.reverse
  else {
    val value = resultSet.getString(1)
    loop(resultSet, value +: accumulator)
  }
}
43
задан Ralph 9 March 2012 в 15:25
поделиться