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
答案 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
对象。