我有一个函数在未来包装对Anorm的SQL函数的调用:
def sqlWithFuture[T](sql: => T) = Future(DB.withConnection(con => sql))
在模型中使用它:
def userQuery = sqlWithFuture(SQL("select init()").as(...))
的产率:
“找不到参数连接的隐式值:java.sql.Connection”
是否可以将隐式连接参数(con)拉回到范围内?
答案 0 :(得分:1)
我假设您正在使用Play 2.0。
让我们看看DB http://www.playframework.com/documentation/api/2.0/scala/play/api/db/DB $。html
def
withConnection [A] (block: (Connection) ⇒ A)(implicit app: Application): A
执行一段代码,提供JDBC连接。连接和所有已创建的语句将自动释放。
SQL对象允许您创建anorm.SqlQuery:http://www.playframework.com/documentation/api/2.0/scala/index.html#anorm.SqlQuery
def as [T] (parser: ResultSetParser[T])(implicit connection: Connection): T
所以问题在于你的签名:
def sqlWithFuture[T](sql: => T) = Future(DB.withConnection(con => sql))
没有说连接应该传递给sql块。
def sqlWithFuture[T](sql: Connection => T) = Future(DB.withConnection(con => sql(con))