Playフレームワークは初めてです。 Play Ebeansで使用するデータソースとしてMySQLデータベースを設定しようとしています。
Play 2.0フレームワークでMySQLを構成するために必要な手順(ドライバーのダウンロード、依存関係の追加など)について説明してください。
Playのドキュメントの このページ をご覧ください。それは言います:
ほとんどが開発モードで役立つh2インメモリデータベースを除き、Play 2.0はデータベースドライバーを提供しません。したがって、実稼働環境にデプロイするには、データベースドライバーをアプリケーションの依存関係として追加する必要があります。
たとえば、MySQL5を使用する場合、コネクタの依存関係を追加する必要があります。
val appDependencies = Seq(
// Add your project dependencies here,
...
"mysql" % "mysql-connector-Java" % "5.1.18"
...
)
SBTがドライバーをダウンロードします。 依存関係の管理に関するセクション も確認する必要があります。
MySQLに接続するには、application.conf
の設定も変更する必要があります。
db.default.driver=com.mysql.jdbc.Driver
db.default.url="mysql://root:secret@localhost/myDatabase"
Carstenが書いたように、ドキュメントから取得できますが、ここに要約があります。
/project/Build.scala
で依存関係が設定されていることを確認してください
val appDependencies = Seq(
// Add your project dependencies here,
"mysql" % "mysql-connector-Java" % "5.1.18"
)
/conf/application.conf
にDBの適切な構成を追加します(デフォルトのH2構成を置き換えます)。
(URLからエンコードを削除しないでください):
db.default.driver=com.mysql.jdbc.Driver
db.default.url="jdbc:mysql://localhost/your_db_name?characterEncoding=UTF-8"
db.default.user=your_login
db.default.password=your_pass
同じファイルで、この行がコメント化されていないことを確認してください。
ebean.default="models.*"
以上で、アプリを再起動(または開発モードで実行)すると、DDLが作成され、適用するように求められます。
Play 2.2.0を使用していますが、プロジェクトのルートフォルダーにあるbuild.sbtに次の行を追加する必要がありました。
"mysql" % "mysql-connector-Java" % "5.1.27"
そして、playは自動的にドライバーをダウンロードします。 Build.scalaはもう必要ないようです。上記の解説者が述べたように、application.confの変更を適用する必要があります。
私が出会ったmysqlデータベースにアクセスする方法のほとんどは、接続を確立してモデル内からデータを取得する方法を説明していません。私のアプリケーションでは、mongoDBと外部mysqlデータベースの両方を使用しています。だからここに私が(mysql側の)事をどのようにしたかがあります:
Play 2.3.3では、build.sbtファイルのlibraryDependenciesにmysql固有の行を追加します。
libraryDependencies ++= Seq(
"mysql" % "mysql-connector-Java" % "5.1.27"
)
/conf/application.confファイルに次を追加します。
db.myotherdb.driver = com.mysql.jdbc.Driver
db.myotherdb.url = "jdbc:mysql://xxx.xxx.xxx.xxx/NameOfOtherDB?characterEncoding=UTF-8"
db.myotherdb.user = MyOtherDbUSername
db.myotherdb.password = MyOtherDbPass
デフォルトのデータベースを使用する場合、または使用する他の名前で「myotherdb」を「default」に置き換えることができます。 「xxx.xxx.xxx.xxx」を、データベースが存在するサーバーのIPアドレス(外部データベースの場合)またはローカルデータベースのローカルホスト(または127.0.0.1)に置き換えます。 「NameOfOtherDB」を使用するデータベースの名前に、「MyOtherDbUSername」をデータベースのユーザー名に、「MyOtherDbPass」をデータベースのパスワードに置き換えます。
モデル(/app/models/MyModel.scala)内にこれを追加します:
val connection = DB.getConnection("myotherdb")
ステートメント、クエリを作成して実行します。
val statement = connection.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY)
val query = "SELECT * FROM myTableName"
val resultset = statement.executeQuery(query)
その後、取得したデータを使用して何でもやりたいことができます。例えば:
while (resultset.next()) {
resultset.getString("columnName")
}
ここで、「columnName」は、取得するDBテーブルの列/フィールドの名前です。
最後になりましたが、close()を呼び出して接続を閉じたい場合があることに注意してください。
これが見つかるまで、MySQLの構成にこだわっていました。
@biesiorの回答から取られた最も重要なこと:
/project/Build.scala
内にあるMySQL connector/Jを追加しますplay dependencies
を実行して、新しく追加されたMySQLコネクタ/ J依存関係を解決しますebean.default="models.*"
db.default.driver=com.mysql.jdbc.Driver db.default.url="jdbc:mysql://www.sample.com:3306/test?characterEncoding=UTF-8" db.default.user=playuser db.default.pass=playuser
を使用してMySQLデータベースを正しく構成しますそれは私の一日を救った。
これまでのすべての回答から得た情報をつなぎ合わせることで、これを機能させることができました。したがって、ここに別の1つがあります。これは、より最新のものであるか、同様の環境を持つユーザーにとって有用であることが望まれます。
環境の詳細:(これは私が使用しているものです)
appication.conf
db.default.driver=com.mysql.jdbc.Driver
db.default.url="jdbc:mysql://localhost:3306/testSchema?characterEncoding=UTF-8"
db.default.user=yourDBUserName
db.default.password=yourDBUserPass
注:
3306
を例に入れました。これは通常、MYSQLのデフォルトであるためです。build.sbt
以下の行をbuild.sbtファイルに追加します。これはlibraryDependencies ++= Seq()
宣言の後でなければなりません。
libraryDependencies += "mysql" % "mysql-connector-Java" % "5.1.36"
最後に
activator reload
play 2.3.1の場合、次の手順に従います。
1)プロジェクトの依存関係(/project/build.sbt内)にMySQL connector/Jを追加します
libraryDependencies ++= Seq( javaJdbc, javaEbean, "mysql" % "mysql-connector-Java" % "5.1.29"
2)デフォルトのebean構成行ebean.default = "models。*"のコメントを外します
3)適切な文字エンコーディングでMySQLデータベースを正しく構成する
db.default.driver=com.mysql.jdbc.Driver //this is com. and not org.
db.default.url="jdbc:mysql://127.0.0.1/test?characterEncoding=UTF-8"
db.default.user=playuser
db.default.pass=playuser
4)ほとんどのインプ。コンソールでreloadコマンドを実行します。
For me this work ,Add this below line into your Dependencies
**"mysql" % "mysql-connector-Java" % "5.1.36"**
So , here is the code
import Java.sql.Connection
val driver = "com.mysql.jdbc.Driver"
val url = "jdbc:mysql://localhost/world"
val username = "root"
val password = "root"
var connection: Connection = null
try { // make the connection
Class.forName(driver)
connection = DriverManager.getConnection(url, username, password)
// create the statement, and run the select query
val statement = connection.createStatement()
val resultSet = statement.executeQuery("SELECT id , name FROM bar")
val sql: SqlQuery = SQL("select * from products order by name asc")
while (resultSet.next()) {
val id = resultSet.getString("id")
val name = resultSet.getString("name")
println(id, name)
}
} catch {
case e: Exception => println("exception caught: " + e);
}
connection.close()
アクティベーター1.3.6を備えた最新のプレイフレームワーク2.4.xでも同じ問題が発生しました。
手順は次のとおりです。ここに記載されている手順に従いました https://www.playframework.com/documentation/2.4.x/JavaDatabase
これが私のapplication.conf
です
# MySQL DB Configuration
db.default.driver=com.mysql.jdbc.Driver
db.default.url="jdbc:mysql://{hostname or ipaddres}/{db name}?characterEncoding=UTF-8"
db.default.username=username // Note that user id deprecated, instead use username. Though that is not a major issue
db.default.password="password"
# JPA Configurations
jpa.default=defaultPersistenceUnit
PlayKeys.externalizeResources = false
# JavaEbean configuration
ebean.default = ["models.*"]
ここにbuild.sbt
があります
libraryDependencies ++= Seq(
javaJdbc,
cache,
javaWs,
javaJpa,
evolutions,
"mysql" % "mysql-connector-Java" % "5.1.27"
)
plugins.sbt
// The Play plugin
addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.4.3")
// Web plugins
addSbtPlugin("com.typesafe.sbt" % "sbt-coffeescript" % "1.0.0")
addSbtPlugin("com.typesafe.sbt" % "sbt-less" % "1.0.6")
addSbtPlugin("com.typesafe.sbt" % "sbt-jshint" % "1.0.3")
addSbtPlugin("com.typesafe.sbt" % "sbt-rjs" % "1.0.7")
addSbtPlugin("com.typesafe.sbt" % "sbt-digest" % "1.1.0")
addSbtPlugin("com.typesafe.sbt" % "sbt-mocha" % "1.1.0")
// Play enhancer - this automatically generates getters/setters for public fields
// and rewrites accessors of these fields to use the getters/setters. Remove this
// plugin if you prefer not to have this feature, or disable on a per project
// basis using disablePlugins(PlayEnhancer) in your build.sbt
addSbtPlugin("com.typesafe.sbt" % "sbt-play-enhancer" % "1.1.0")
// Play Ebean support, to enable, uncomment this line, and enable in your build.sbt using
// enablePlugins(SbtEbean). Note, uncommenting this line will automatically bring in
// Play enhancer, regardless of whether the line above is commented out or not.
addSbtPlugin("com.typesafe.sbt" % "sbt-play-ebean" % "1.0.0")
ここに重要なステップがあります。
上記の手順を設定したら、コマンドラインに移動してアクティベーターを停止し、
activator run
コマンドを実行します。私の状況では、_unable to find mysql drivers
というエラーが引き続き発生していました。activator run
を実行した後、アクティベーターは実際にMySQLドライバーをダウンロードし、依存関係を解決します。それが私の問題を解決した重要なステップです。
SBTを使用したplay Javaプロジェクトの場合
「build.sbt」でライブラリの依存関係を次のように変更します
libraryDependencies ++= Seq(
javaJdbc,
javaEbean,
cache,
javaWs,
"mysql" % "mysql-connector-Java" % "5.1.27"
)
「アクティベーターの実行」を使用してプロジェクトを実行します
Playは必要なjdbcコネクタをダウンします。