繁体   English   中英

将SQL ResultSet转换为Scala列表或其他集合类型的更好,更惯用的方法是什么?

[英]Any better, more idiomatic way to convert SQL ResultSet to a Scala List or other collection type?

我正在使用以下天真代码将ResultSet转换为Scala List

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

是否有一种更好的方法,对于Scala更为惯用,不需要使用可变对象?

你为什么不试试这个:

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

从这个答案采取这里

我有类似的问题,我的解决方案是:

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

希望有所帮助。

在评论部分中使用像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会相应地在内部优化这个方法。

谢谢

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM