我如何使用光滑3.0一次返回一行?

时间:2015-07-01 19:27:20

标签: java sql scala slick slick-3.0

我如何一次为return表格的一行构建一个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)

但不是打印,我需要各自返回。

1 个答案:

答案 0 :(得分:2)

答案

改为使用具体化结果:

val result = Await.result((db.run(q5.result)), Duration.Inf)

resultSeq,其中包含您的所有患者数据。使用foreach迭代结果集:

result.foreach(r => yourFancyAlgorithm(r))  // r is a single patients data row

旁注

Await阻止当前线程,使其中一个光滑的最佳功能过时。阻塞线程是你不应该做的事情。我强烈建议您阅读scala中的Future and Promise 上面的例子可以简单地写成:

val result = db.run(q5.result))
在这种情况下,

result的类型为Future[Seq[(yourPatientsData)]]。要访问数据,请在结果上使用map

result.map(d => whatever)  // d is of type Seq[(yourPatientsData)]

在等待结果的同时,应用程序的其余部分将继续进行计算和处理。最后,当结果准备好后,回调(d => whatever)将会运行。