1

我有一个函数可以在 Future 中包装对 Anorm 的 SQL 函数的调用:

def sqlWithFuture[T](sql: => T) = Future(DB.withConnection(con => sql))

在模型中使用它:

def userQuery = sqlWithFuture(SQL("select init()").as(...))

产量:

“找不到参数连接的隐式值:java.sql.Connection”

有什么方法可以将隐式连接参数(con)拉回范围?

4

1 回答 1

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))
于 2013-04-12T10:18:48.757 回答