如何使用 sql""select c from T""".as[T] 插值在 slick 中执行动态查询

How to execute dynamic query with sql""select c from T""".as[T] interpolation in slick

我正在尝试使用 Slick3 实现一个函数 return 一个元组。

def executeQueryConfig2[T](sql: String, f : Option[T] => Unit): Future[T] = {
val action2 = sql"""$sql""".as[T].headOption
getDatabase(config).run(action2).mapTo[T].map(f(_)).recover{ case e: SQLException => println(e.getMessage) }
.......
}

编译器显示错误:

Error:(66, 35) could not find implicit value for parameter rconv: slick.jdbc.GetResult[T]
val action2 = sql"""$sql""".as[T].headOption
                              ^

如果T是slick 3实现的类型中的类型,我怎么实现这样的功能?

示例:

executeQueryConfig2[Int]("SELECT C FROM T", f1(_))

谢谢。

您必须为您的类型提供 GetResult 函数 T:

def executeQueryConfig2[T:ClassTag](sql: String, f: Option[T] => Unit)
    (implicit rconv: GetResult[T]): Future[T] = {
  val action2 = sql"""$sql""".as[T].headOption

顺便说一句,以下语句无法编译,因为您不能在 T 上调用 f,只能在 Option[T].

上调用
  db.run(action2).mapTo[T].map(f(_)).recover{ case e: SQLException => println(e.getMessage) }
}