非常简单的Slick查询,获得单个值

时间:2017-06-14 10:52:25

标签: mysql scala slick

我试图在我的代码中引入光滑以替换现有的jdbc代码。

首先,我想使用scala工作表来运行一个非常简单的查询,我想传入一个整数id,然后返回一个字符串uuid。这是整个代码库中最简单的方法。

据我所知,我需要建立一个与数据库的连接,设置一个动作,然后运行该动作。我有以下代码:



val db = Database.forURL("jdbc:mysql://mysql-dev.${URL}/${DB}?autoReconnect=true&characterEncoding=UTF-8",
  driver = "com.mysql.jdbc.Driver", user = "${user}",password= "${pass}")

val getUUID = sql"""SELECT ${UUIDFIELD} from users u WHERE u.${IDFIELD} = ${Id}""".as[String]

val uuid:String = db.run(getUUID)
println(uuid)

我很确定我没有在Database.forURL调用中正确设置驱动程序,但工作表也抱怨db.run的结果不是字符串。如何获取字符串UUID值?

1 个答案:

答案 0 :(得分:2)

db.run方法返回Future[_]类型。您应该使用Await来获取结果。

val db = Database.forURL("jdbc:mysql://mysql-dev.${URL}/${DB}?autoReconnect=true&characterEncoding=UTF-8",
  driver = "com.mysql.jdbc.Driver", user = "${user}",password= "${pass}")

val getUUID = sql"""SELECT ${UUIDFIELD} from users u WHERE u.${IDFIELD} = ${Id}""".as[String]

val uuidFuture:Future[String] = db.run(getUUID)

import scala.concurrent._
import scala.concurrent.duration._

val uuid:String = Await.result(uuidFuture, Duration.Inf)
println(uuid)