Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 如何将Slick 2.1普通SQL查询移植到Slick 3.0_Scala_Slick - Fatal编程技术网

Scala 如何将Slick 2.1普通SQL查询移植到Slick 3.0

Scala 如何将Slick 2.1普通SQL查询移植到Slick 3.0,scala,slick,Scala,Slick,Slick 2.1中的以下工作代码返回一个整数(在本例中,该整数恰好是运行名为“foobar”的函数的结果): 如何将其移植到Slick 3.0?根据Slick 3.0文档,查询必须转换为DBIOAction。这就是我尝试过的: import driver.api._ ... def getFoobar(): Future[Int] = { val query = sql"select foobar()".as[Int] db.run(query) } 但这会导致以下编译错误

Slick 2.1中的以下工作代码返回一个整数(在本例中,该整数恰好是运行名为“foobar”的函数的结果):

如何将其移植到Slick 3.0?根据Slick 3.0文档,查询必须转换为DBIOAction。这就是我尝试过的:

import driver.api._

...

def getFoobar(): Future[Int] = {
   val query = sql"select foobar()".as[Int]
   db.run(query) 
}
但这会导致以下编译错误:

[error]  found   : slick.profile.SqlStreamingAction[Vector[Int],Int,slick.dbio.Effect]#ResultAction    [Int,slick.dbio.NoStream,slick.dbio.Effect]
[error]  required: MyDAO.this.driver.api.DBIO[Seq[Int]]
sql插值器似乎正在生成
SqlStreamingAction
而不是
DBIO
,正如
db.run
所期望的那样


在新的Slick 3 API中,写这篇文章的正确方法是什么?

我使用了类似的东西,它对我很有用

import slick.driver.MySQLDriver.api._

def get(id : String) : Future[Channel] = {
implicit val getChannelResult = GetResult(r => Channel(r.<<, r.<<, r.<<, r.<<, r.<<))
val query = sql"select * from Channel where id = $id".as[Channel]
db.run(myq.headOption)
}

您可以粘贴驱动程序和db配置步骤,这样我们就可以更深入地了解代码,以确定实际的错误步骤

,所以有一点似乎有点不对劲,那就是它需要
Seq[Int]
,您可以尝试将as更改为
。as[Seq[Int]]。head
?根据文档,您的查询应该可以工作,因此不确定可能还有什么其他问题。经过一点实验,我得到了
sql“select foobar()”。作为[Int]。头
进行类型检查。这可能是正确的方法,但我不想关闭此答案,直到我发现它在运行时的行为正确为止。@scrapdog看看这个问题,它可能也会帮助您
import slick.driver.MySQLDriver.api._

def get(id : String) : Future[Channel] = {
implicit val getChannelResult = GetResult(r => Channel(r.<<, r.<<, r.<<, r.<<, r.<<))
val query = sql"select * from Channel where id = $id".as[Channel]
db.run(myq.headOption)
}
[error]  required: MyDAO.this.driver.api.DBIO[Seq[Int]]