有没有更好的方法将ResultSet从SQL查询转换为Scala中的Array / List? 下面显示的天真的方式不是Scala。我想知道如何改进它。
val rs = pstmt.executeQuery()
var nids = List[String]()
while (rs.next()) {
nids = nids :+ rs.getString(1)
}
rs.close()
答案 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)
如评论部分所述,使用slick
或Quill
等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会相应地在内部优化这个方法。
由于