如何构建一个 scala 查询来一次返回
表中的一行?
如果我的表格有助于回答这个问题,它们位于以下位置: Slick 3.0 (scala) queries don't return data till they are run multiple times (I think)
val q5 = for {
c <- dat.patientsss
} yield (c.PID, c.Gender, c.Age, c.Ethnicity)
Await.result((db.stream(q5.result).foreach(println)),Duration.Inf)
但我不需要打印,而是需要返回每个。
最佳答案
回答
改用具体化结果:
val result = Await.result((db.run(q5.result)), Duration.Inf)
result
是一个包含所有患者数据的 Seq
。使用 foreach
迭代结果集:
result.foreach(r => yourFancyAlgorithm(r)) // r is a single patients data row
<小时/>
旁注
Await
会阻止当前线程,从而使 slick 的最佳功能之一过时。阻塞线程是你不应该做的事情。我强烈建议阅读 Future
and Promise
在 scala 中。
上面的例子可以简单写为:
val result = db.run(q5.result))
在这种情况下,结果
的类型将为Future[Seq[(yourPatientsData)]]
。要访问数据,请在结果上使用 map
:
result.map(d => whatever) // d is of type Seq[(yourPatientsData)]
在等待结果时,应用程序的其余部分将继续进行计算和其他操作。最后,当结果准备就绪时,回调 (d =>whatever
) 将运行。
关于java - 我如何使用 slick 3.0 一次返回一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31170006/