Когда я запрашиваю базу данных и получаю обратно (только для пересылки, только для чтения) 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)
}
}