Documentation

§SQL データベースアクセス

§JDBC コネクションプールの構成

Play には JDBC コネクションプールを管理するプラグインが同梱されています。これを使って、必要なだけデータベースへの接続設定を書くことができます。

DB プラグインを有効にするために、依存ライブラリに jdbc を追加しましょう:

libraryDependencies += jdbc

そして conf/application.conf でコネクションプールの設定を行う必要があります。規約により、デフォルトの JDBC データソースは default という名前である必要があり、これに関連する設定属性名は db.default.driverdb.default.url のようになります。

もし設定が適切でない場合は、ブラウザ上ですぐに気づくことができるでしょう:

注意: 設定ファイルの文法において : は予約文字となっているため、JDBC の URL 属性をダブルクォーテーションで囲まなければならない場合があります。

§H2 データベースエンジン接続設定

インメモリデータベース:

# Default database configuration using H2 database engine in an in-memory mode
db.default.driver=org.h2.Driver
db.default.url="jdbc:h2:mem:play"

ファイルベースデータベース:

# Default database configuration using H2 database engine in a persistent mode
db.default.driver=org.h2.Driver
db.default.url="jdbc:h2:/path/to/db-file"

H2 データベースの URL 設定に関する詳細については H2 Database Engine Cheat Sheet を見てください。

§SQLite データベースエンジン接続設定

# Default database configuration using SQLite database engine
db.default.driver=org.sqlite.JDBC
db.default.url="jdbc:sqlite:/path/to/db-file"

§PostgreSQL データベースエンジン接続設定

# Default database configuration using PostgreSQL database engine
db.default.driver=org.postgresql.Driver
db.default.url="jdbc:postgresql://database.example.com/playdb"

§MySQL データベースエンジン接続設定

# Default database configuration using MySQL database engine
# Connect to playdb as playdbuser
db.default.driver=com.mysql.jdbc.Driver
db.default.url="jdbc:mysql://localhost/playdb"
db.default.username=playdbuser
db.default.password="a strong password"

§複数データソースを設定する方法

# Orders database
db.orders.driver=org.h2.Driver
db.orders.url="jdbc:h2:mem:orders"

# Customers database
db.customers.driver=org.h2.Driver
db.customers.url="jdbc:h2:mem:customers"

§JDBC ドライバの設定

Play には H2 データベースのドライバのみが同梱されています。そのため、本番環境にデプロイする際は必要なデータベースドライバを依存ライブラリに追加する必要があるでしょう。

例えば MySQL5 を使用する場合、接続するために以下の 依存性 を追加する必要があります:

libraryDependencies += "mysql" % "mysql-connector-java" % "5.1.34"

あるいは Maven/Ivy2 リポジトリに必要なドライバが見つからない場合、Play プロジェクトの unmanaged な依存ライブラリ を配置するための場所である lib ディレクトリにドライバを放り込むことができます。

§JDBC データソースの参照

play.api.db パッケージ(の DB オブジェクト)は設定されたデータソースにアクセスする手段を提供します。

import play.api.db._

val ds = DB.getDataSource()

§JDBC コネクションの取得

JDBC コネクションを取得する方法は何種類かあります。以下が一番シンプルな方法です:

val connection = DB.getConnection()

以下のコードは、MySQL 5.* を使った JDBC のとてもシンプルな例です:

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

object Application extends Controller {

  def index = Action {
    var outString = "Number is "
    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)
  }

}

しかし、当然ながらこの方法では取得したコネクションをコネクションプールに返却するために、必ずどこかで close() を呼び出さなければなりません。あなたの代わりに Play にコネクションのクローズを管理させる別のやり方があります。

// access "default" database
DB.withConnection { conn =>
  // do whatever you need with the connection
}

default 以外のデータベースの場合は以下のようにします。

// access "orders" database instead of "default"
DB.withConnection("orders") { conn =>
  // do whatever you need with the connection
}

このコネクションはブロックの終わりで自動的にクローズされます。

Tip: StatementResultSet もコネクションと一緒にクローズされます。

少し違ったやり方として、コネクションの auto-commit を false に設定し、ブロック内をトランザクション制御する方法もあります。

DB.withTransaction { conn =>
  // do whatever you need with the connection
}

§コネクションプールの選択と設定

特別な設定がなくても、Play は HikariCPBoneCP の 2 つのデータベースコネクションプールの実装を提供しています。 デフォルトは HikariCP です が、 play.db.pool 属性を設定することで変更できます:

play.db.pool=bonecp

コネクションプールに関するすべての設定オプションは、Play のJDBC の reference.conf 内の play.db.prototype 属性を参照してください。

§テスト

データベースのテストに関する情報は、インメモリデータベースのセットアップを含め、データベースを使用したテスト を参照してください。

§Play の データベースエボリューションを使用する

Play のデータベースエボリューションの利便性については、Evolutions を参照し、使用に際してはセットアップ方法に従ってください。

Next: Slick によるデータベースアクセス


このドキュメントの翻訳は Play チームによってメンテナンスされているものではありません。 間違いを見つけた場合、このページのソースコードを ここ で確認することができます。 ドキュメントガイドライン を読んで、お気軽にプルリクエストを送ってください。