如何将SLICK 2.1纯SQL查询移植到SLICK 3.0 [英] How to port Slick 2.1 plain SQL queries to Slick 3.0

查看:0
本文介绍了如何将SLICK 2.1纯SQL查询移植到SLICK 3.0的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

slick 2.1中的以下工作代码返回单个整数(在本例中,它恰好是运行名为"foobar"的函数的结果):

def getFoobar(): Int = DB.withSession {
   val query = Q.queryNA[Int]("select foobar()")
   query.first
}

一个端口如何将其移植到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,而不是db.run所预期的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.run(DBIOAction[T,NoStream,Nothing])命令将接受所有类型的操作,如sqlStreamingaction、StreamingDriverAction、DriverAction等。

我想问题出在驱动程序或数据库配置上。因此错误

[error]  required: MyDAO.this.driver.api.DBIO[Seq[Int]]

您是否可以粘贴驱动程序和数据库配置步骤,以便我们可以更深入地查看代码以确定实际的错误步骤

这篇关于如何将SLICK 2.1纯SQL查询移植到SLICK 3.0的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆