§SQL データベースアクセス
§JDBC コネクションプールの構成
Play 2.0 には 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.user=playdbuser
db.default.pass="a strong password"
§コンソールで SQL 文を確認するには?
db.default.logStatements=true
logger.com.jolbox=DEBUG // for EBean
§複数データソースを設定するには
# 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 2.0 には H2 データベースのドライバのみが同梱されています。このため、本番環境にデプロイするには、必要なデータベースドライバを依存性として追加する必要があるでしょう。
例えば MySQL5 を使用する場合、コネクタのために 依存性 を追加する必要があります:
val appDependencies = Seq(
"mysql" % "mysql-connector-java" % "5.1.21"
)
リポジトリにドライバが見つからない場合は、プロジェクトの 依存性が管理されない lib
ディレクトリにドライバを放り込むことができます。
§JDBC データソースの参照
play.api.db
パッケージには、設定したデータソースを参照する方法が用意されています。
import play.api.db._
val ds = DB.getDataSource()
§JDBC コネクションの取得
JDBC コネクションを取得する方法は何種類かあります。一つめの方法が最もシンプルで、次のように書きます。
val connection = DB.getConnection()
しかし、この方法だと、取得したコネクションをコネクションプールに返却するために、どこかの時点で 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
にして、ブロックを 1 トランザクションとさせる方法もあります。
DB.withTransaction { conn =>
// do whatever you need with the connection
}
次ページ: Anorm によるデータベースアクセス