§SQL データベースアクセス
§JDBC コネクションプールの構成
Play には JDBC コネクションプールを管理するプラグインが同梱されています。これを使って、必要なだけデータベースへの接続設定を書くことができます。
DB プラグインを有効にするために、依存ライブラリに jdbc を追加しましょう:
libraryDependencies += jdbc
そして conf/application.conf
でコネクションプールの設定を行う必要があります。規約により、デフォルトの JDBC データソースは default
という名前である必要があり、これに関連する設定属性名は db.default.driver
や db.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:
Statement
とResultSet
もコネクションと一緒にクローズされます。
少し違ったやり方として、コネクションの auto-commit を false
に設定し、ブロック内をトランザクション制御する方法もあります。
DB.withTransaction { conn =>
// do whatever you need with the connection
}
§コネクションプールの選択と設定
特別な設定がなくても、Play は HikariCP と BoneCP の 2 つのデータベースコネクションプールの実装を提供しています。 デフォルトは HikariCP です が、 play.db.pool
属性を設定することで変更できます:
play.db.pool=bonecp
コネクションプールに関するすべての設定オプションは、Play のJDBC の reference.conf
内の play.db.prototype
属性を参照してください。
§テスト
データベースのテストに関する情報は、インメモリデータベースのセットアップを含め、データベースを使用したテスト を参照してください。
§Play の データベースエボリューションを使用する
Play のデータベースエボリューションの利便性については、Evolutions を参照し、使用に際してはセットアップ方法に従ってください。
Next: Slick によるデータベースアクセス
このドキュメントの翻訳は Play チームによってメンテナンスされているものではありません。 間違いを見つけた場合、このページのソースコードを ここ で確認することができます。 ドキュメントガイドライン を読んで、お気軽にプルリクエストを送ってください。