访问Play for Scala中的默认JDBC数据库

时间:2016-06-19 04:36:06

标签: scala playframework playframework-2.5

In this Play tutorial解释了如何使用JDBC连接池,包括访问数据库的示例。问题是,不清楚如何将默认数据库分配到db字段。

例如:

class ScalaControllerInject @Inject() extends Controller {

  def index = Action {
    var outString = "Number is "

    val db: Database = ??? // How to assign the default database to db?

    val conn = db.getConnection()

    try {
      val stmt = conn.createStatement
      val rs = stmt.executeQuery("SELECT 9 as testkey ")

      while (rs.next()) {
        outString += rs.getString("testkey")
      }
    } finally {
      conn.close()
    }
    Ok(outString)
  }

}

我将db声明放在方法而不是class参数中,但意图是相同的。

注意:我使用的是Play 2.5.2

2 个答案:

答案 0 :(得分:3)

当您查看documentation时,您可以看到如何在控制器中注入默认数据库(在application.conf中配置)。

import javax.inject.Inject

import play.api.Play.current
import play.api.mvc._
import play.api.db._

class ScalaControllerInject @Inject()(db: Database) extends Controller {
  // ...
}

注意类声明,其中@Inject()后跟注入的参数列表。

然后可以在操作中使用db实例。

db.withConnection { con: java.sql.Connection =>
  doSomethingWith(con)
}

如果您在应用程序设置中配置了多个数据库,则可以使用NamedDatabase注释注入正确的数据库。

导入javax.inject.Inject import play.api.db. {Database,NamedDatabase} import play.api.mvc.Controller

// inject "orders" database instead of "default"
class ScalaInjectNamed @Inject()(
  @NamedDatabase("orders") db: Database) extends Controller {

  // do whatever you need with the db
}

答案 1 :(得分:1)

我在接受的答案评论中找到了我正在寻找的对话。如果您不想使用注入,也可以通过这种方式连接到数据库。必须将SBT .build配置为您拥有的数据库和正确的JDBC驱动程序。但是,如果你有,那么无论你想在哪个类中使用数据库,请确保你有:

import play.api.db.Databases

然后你可以:

class ExampleClass {

  val testDb = Databases(
    driver = "org.postgresql.Driver",
    url = "postgres://dbUserName:password@localhost:port#/name_of_db"
  )

这将允许您像使用其他方式一样使用testDb对象。