首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将Slick 2.1普通SQL查询移植到Slick 3.0

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

Stack Overflow用户
提问于 2015-06-08 20:40:14
回答 1查看 1.6K关注 0票数 2

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

代码语言:javascript
复制
def getFoobar(): Int = DB.withSession {
   val query = Q.queryNA[Int]("select foobar()")
   query.first
}

一个端口如何才能使3.0变得光滑?根据slick3.0文档,查询必须转换为DBIOAction。所以这就是我尝试过的:

代码语言:javascript
复制
import driver.api._

...

def getFoobar(): Future[Int] = {
   val query = sql"select foobar()".as[Int]
   db.run(query) 
}

但这会导致以下编译错误:

代码语言:javascript
复制
[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所期望的那样。

在新的slick3API中写这个的正确方法是什么?

EN

回答 1

Stack Overflow用户

发布于 2015-06-28 17:40:41

我用了一些类似的东西,对我来说很管用。

代码语言:javascript
复制
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.run(DBIOActionT,NoStream,Nothing)命令将接受所有类型的操作,如sqlstreamingaction、StreamingDriverAction、DriverAction等。

我想问题在于驱动程序或db配置。所以这个错误

代码语言:javascript
复制
[error]  required: MyDAO.this.driver.api.DBIO[Seq[Int]]

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30718671

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档