我开始使用光滑和scala,似乎我仍然没有基础知识:
我正在使用slick 3.0.0和scala 2.11.7,我正在连接到Oracle数据库。
我想获取表格中的行数,所以我去搜索并找到以下内容: 1)这个告诉我.run不存在:
mytable.length.run
2)这个告诉我发现了类型不匹配:slick.lifted.Rep [Int]和期望字符串:
var q = for(u <- mytable) yield u.id
print(q.size)
3)这个编译并运行但打印Rep(Pure $ @ 309962262):
var q = for{row <- mytable} yield row
println(Query(q.length))
所以我不确定是不是因为我不明白这是如何工作的,但我想的是会发生以下情况:
A)constructQuery b)&#34;运行&#34;查询。
所以我使用的其他查询如下:
val db = Database.forConfig("Oracle")
try{
val f: Future[Unit] = {
val query: StreamingDBIO[Seq[String], String] = participants.map(_.id).result // A)"Construct query"
val stremQuery: DatabasePublisher[String] = db.stream(query) //B) "Run query"
streamQuery.foreach(println)
}
Await.result(f, Duration.Inf)
}
finally db.close
我错过了什么? 3号没有给我我想要的东西,因为它不在db.stream/db.run/db.something命令下?或者我只是输了=)
提前致谢 托纳
答案 0 :(得分:3)
光头查询数据库基本上包括以下三个步骤:
Query
Query
转换为Action
Action
所以你的例子看起来像这样(类型是可选的,为了清楚起见而添加):
val query = mytable.length // length is an aggregation
val action = query.result
val result: Future[Int] = db.run(action)
// Access result in a non blocking way (recommended):
result.map(count: Int => ...)
// or for completeness use Await (not recommended):
val count: Int = Await.result(result, Duration.Inf)
进一步阅读: