仅使用基本的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/

10-13 09:01