有任何更好的方法将SQL ResultSet转换为Scala列表

时间:2018-01-19 05:25:24

标签: scala

有没有更好的方法将ResultSet从SQL查询转换为Scala中的Array / List? 下面显示的天真的方式不是Scala。我想知道如何改进它。

val rs = pstmt.executeQuery()
var nids = List[String]()
while (rs.next()) {
  nids = nids :+ rs.getString(1)
}
rs.close()

3 个答案:

答案 0 :(得分:9)

你为什么不试试这个:

new Iterator[String] {
  def hasNext = resultSet.next()
  def next() = resultSet.getString(1)
}.toStream

取自这个答案here

答案 1 :(得分:1)

我有一个类似的问题,我的解决方法是:

Iterator.from(0).takeWhile(_ => rs.next()).map(_ => rs.getString(1)).toList

希望会有所帮助。

答案 2 :(得分:0)

如评论部分所述,使用slickQuill等ORM工具被认为是更好的方法。

如果要使用Scala代码处理ResultSet。您可以使用tailRecursion

@scala.annotation.tailrec
def getResult(resultSet: ResultSet, list: List[String] = Nil): List[String] = {
  if (resultSet.next()) {
    val value = resultSet.getString(0)
    getResult(resultSet, value :: list)
  }
  else {
    list
  }
}

此方法返回包含第0位列值的字符串列表。这个过程是纯不可变的,所以你不必担心。在正面,这个方法是尾递归,所以Scala会相应地在内部优化这个方法。

由于