java - 我如何使用 slick 3.0 一次返回一行?

标签 java sql scala slick slick-3.0

如何构建一个 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/

相关文章:

c# - 删除字符串变量中存储的值的最后两个字符

scala - Spark shell : strange behavior with import

java - JSP 中如何使用 .do 文件在 Java 和 Struts 框架之外的前端 Web 表单之间传递数据?

java - 我怎样才能解决这个等于原始类型(int)

java - 在 Scala 注释中使用常量的最佳实践

sql - 如何在oracle DB中检查某个日期是否在当前日历月中

sql - 加入两个数据框 SQL where 和 between overlaps

scala 文本中单词之间的绝对最小距离

scala - 尝试使用 MMLSpark 的 scala LIME 库解释模型时出现异常

java - AOP切入点仅适用于带注释的方法