I am assuming you are working with Play 2.0.
Let's look at 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
Execute a block of code, providing a JDBC connection. The connection and all created statements are automatically released.
The SQL object let you create an 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
So the problem here is with your signature:
def sqlWithFuture[T](sql: => T) = Future(DB.withConnection(con => sql))
Nothing says that the connection should be passed to the sql block.
def sqlWithFuture[T](sql: Connection => T) = Future(DB.withConnection(con => sql(con))