仅使用基本的JDBC接口(interface)即可使用Scala读取一些数据。
在F#中(使用System.Data.SqlClient命名空间),我们可以执行类似的操作以从数据库返回一个不可变的列表。
let rs = cmd.ExecuteReader()
[while rs.Read() do yield rs.GetInt32(1)]
据我所知,在Scala中这更加困难,据我所知,没有像F#这样的“同时”理解能力。实际上,我想在Scala中做一些类似于F#的事情,而不必使用可变的var-仅仅是因为它们看起来很丑,并且添加到了代码行中。
现在,这样的事情在我的Scala代码中似乎司空见惯:
var result = Seq.empty[Int]
val rs = stmt.executeQuery()
while (rs.next()) {
result = result :+ rs.getInt(1) }
最佳答案
我将创建一个Iterator
的自定义子类来包装查询结果。真的很简单; senia展示了如何。
但是你也可以
val rs = stmt.executeQuery
val it = Iterator.continually(if (rs.next()) Some(rs.getInt(1)) else None)
val result = it.takeWhile(_.isDefined).toList.flatten
关于与F#中的Scala优雅列表理解,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17276649/