web-dev-qa-db-ja.com

Playフレームワーク2.0でMySQLデータベースを使用するために必要な手順

Playフレームワークは初めてです。 Play Ebeansで使用するデータソースとしてMySQLデータベースを設定しようとしています。

Play 2.0フレームワークでMySQLを構成するために必要な手順(ドライバーのダウンロード、依存関係の追加など)について説明してください。

91
Veera

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"
101
Carsten

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が作成され、適用するように求められます。

94
biesior

Play 2.2.0を使用していますが、プロジェクトのルートフォルダーにあるbuild.sbtに次の行を追加する必要がありました。

  "mysql" % "mysql-connector-Java" % "5.1.27"

そして、playは自動的にドライバーをダウンロードします。 Build.scalaはもう必要ないようです。上記の解説者が述べたように、application.confの変更を適用する必要があります。

10
jrook

私が出会ったmysqlデータベースにアクセスする方法のほとんどは、接続を確立してモデル内からデータを取得する方法を説明していません。私のアプリケーションでは、mongoDBと外部mysqlデータベースの両方を使用しています。だからここに私が(mysql側の)事をどのようにしたかがあります:

  1. Play 2.3.3では、build.sbtファイルのlibraryDependenciesにmysql固有の行を追加します。

    libraryDependencies ++= Seq(
        "mysql" % "mysql-connector-Java" % "5.1.27"
    )
    
  2. /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」をデータベースのパスワードに置き換えます。

  3. モデル(/app/models/MyModel.scala)内にこれを追加します:

    val connection = DB.getConnection("myotherdb")
    
  4. ステートメント、クエリを作成して実行します。

    val statement = connection.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY)
    val query = "SELECT * FROM myTableName"
    val resultset = statement.executeQuery(query)
    
  5. その後、取得したデータを使用して何でもやりたいことができます。例えば:

    while (resultset.next()) {
        resultset.getString("columnName")
    }
    

    ここで、「columnName」は、取得するDBテーブルの列/フィールドの名前です。

最後になりましたが、close()を呼び出して接続を閉じたい場合があることに注意してください。

8
consuela

これが見つかるまで、MySQLの構成にこだわっていました。

@biesiorの回答から取られた最も重要なこと:

  • プロジェクトの依存関係に/project/Build.scala内にあるMySQL connector/Jを追加します
  • 依存関係を追加した後、play dependenciesを実行して、新しく追加されたMySQLコネクタ/ J依存関係を解決します
  • デフォルトのebean構成行のコメントを外します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データベースを正しく構成します

それは私の一日を救った。

6
ck1910

Play 2.4.3&MYSQL 5.7.9

これまでのすべての回答から得た情報をつなぎ合わせることで、これを機能させることができました。したがって、ここに別の1つがあります。これは、より最新のものであるか、同様の環境を持つユーザーにとって有用であることが望まれます。

環境の詳細:これは私が使用しているものです

  • Play 2.4.3にはactivator-1.3.7-minimalが付属しています
  • JDK8、このバージョンのプレイはJDK7で動作するとは思わないので、すでにこれがあるはずです
  • MYSQL 5.7.9

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

注:

  • uRLのtestSchemaはデータベース名です。 MYSQLワークベンチ のようなものを使用している場合、SCHEMASセクションの下にリストされます。私はtestSchemaを呼び出しました。他の人はそれを「myDatabase」のようなものと呼ぶかもしれません
  • ポートはMYSQLポートである必要があります。アプリケーションポートではありません。 3306を例に入れました。これは通常、MYSQLのデフォルトであるためです。

build.sbt

以下の行をbuild.sbtファイルに追加します。これはlibraryDependencies ++= Seq()宣言の後でなければなりません。

libraryDependencies += "mysql" % "mysql-connector-Java" % "5.1.36"

最後に

  • プロジェクトのルートからこのコマンドを実行します-> activator reload
  • アプリケーションを再起動します
4
Kris Hollenbeck

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コマンドを実行します。

4
working
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
SwwapnilShirke

アクティベーター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ドライバーをダウンロードし、依存関係を解決します。それが私の問題を解決した重要なステップです。

1
Manjunath Reddy

SBTを使用したplay Javaプロジェクトの場合

「build.sbt」でライブラリの依存関係を次のように変更します

libraryDependencies ++= Seq(
  javaJdbc,
  javaEbean,
  cache,
  javaWs,
  "mysql" % "mysql-connector-Java" % "5.1.27"
)

「アクティベーターの実行」を使用してプロジェクトを実行します

Playは必要なjdbcコネクタをダウンします。

1
Anand Kumar