Шаги, необходимые для использования базы данных MySQL с Play framework 2.0


Я новичок в Играть рамки. Я пытаюсь настроить базу данных MySQL в качестве источника данных для использования с Play Ebeans.

не могли бы вы кто-нибудь объяснить шаги, которые необходимы для настройки MySQL с Play 2.0 framework (например, загрузка драйверов, добавление зависимости и т. д.).

10 89

10 ответов:

посмотреть на этой странице из документации Play. Он говорит:

кроме базы данных H2 в памяти, полезной в основном в режиме разработки, Play 2.0 не предоставляет никаких драйверов базы данных. Следовательно, для развертывания в рабочей среде вам придется добавить драйвер базы данных в качестве зависимости приложения.

например, если вы используете MySQL5, вам нужно добавить зависимость для контакта:

val appDependencies = Seq(
    // Add your project dependencies here,
    ...
    "mysql" % "mysql-connector-java" % "5.1.18"
    ...
)

СБТ будет скачать драйвер для вас. Вы также должны проверить раздел по управлению зависимостями.

чтобы подключиться к MySQL, вам также нужно будет изменить некоторые настройки в вашем application.conf:

db.default.driver=com.mysql.jdbc.Driver
db.default.url="mysql://root:secret@localhost/myDatabase"

как писал Карстен, его можно извлечь из документации, однако вот резюме:

убедитесь, что зависимость настроена в /project/Build.scala

val appDependencies = Seq(
    // Add your project dependencies here,
    "mysql" % "mysql-connector-java" % "5.1.18"
)

добавьте правильную конфигурацию БД (замените конфигурацию H2 по умолчанию) в /conf/application.conf:

(не удаляйте кодировку из 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.*"

вот и все, перезагрузите приложение (или запустить в режиме dev), то он будет создать DDL и попросить вас, чтобы применить его.

Я использую play 2.2.0, и мне просто нужно было добавить следующую строку для сборки.sbt в корневой папке проекта.

  "mysql" % "mysql-connector-java" % "5.1.27"

и play автоматически загружает драйвер. Кажется, строить.скала больше не нужен для этого. Изменения в приложении.conf следует применять, как упоминалось выше комментаторами.

большинство методов доступа к базе данных mysql, с которыми я столкнулся, не объясняют, как установить соединение и получить данные из модели. В моем приложении я использую как mongoDB, так и внешнюю базу данных mysql. Итак, вот как я сделал (сторона mysql) вещи:

  1. для игры 2.3.3, в построении.sbt-файл добавьте строку mysql specific в libraryDependencies:

    libraryDependencies ++= Seq(
        "mysql" % "mysql-connector-java" % "5.1.27"
    )
    
  2. в приложении/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-адрес сервера, на котором находится ваша база данных (в случае внешней базы данных) или localhost (или 127.0.0.1) для локальной базы данных. Замените "NameOfOtherDB" на имя базы данных, которую вы хотите использовать, "MyOtherDbUSername" на имя пользователя базы данных и "MyOtherDbPass" на ваш пароль к базе данных.

  3. внутри вашей модели (/app/models / MyModel.скала) добавить это:

    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" - это имя столбца/поля таблицы БД, которое вы хотите получить.

последние но не в последнюю очередь, я хотел бы отметить, что вы можете закрыть соединение, позвонив закрыть()

застрял с моей конфигурацией MySQL, пока я не нашел это.

самые важные вещи взяты из @biesior ответ:

  • добавить MySQL connector/J в зависимости проекта (который находится внутри /project/Build.scala)
  • после добавления зависимости запустите play dependencies для разрешения недавно добавленной зависимости MySQL connector/J
  • раскомментируйте строку конфигурации ebean по умолчанию ebean.default="models.*"
  • правильно настроить базу данных MySQL с правильной кодировкой символов 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

это спасло мой день.

на играть 2.3.1 выполните следующие действия.

1) добавьте MySQL connector /J в зависимость проекта (которая находится внутри/project / build.sbt)

libraryDependencies ++= Seq( javaJdbc, javaEbean, "mysql" % "mysql-connector-java" % "5.1.29"

2) раскомментируйте строку конфигурации ebean по умолчанию ebean.по умолчанию= " модели.* "

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) Самый Чертенок. Запустить перезагрузка команда в консоли.

Play 2.4.3 & MYSQL 5.7.9

я смог получить эту работу, собрав воедино биты информации из всех предыдущих ответов. Итак, вот еще один, который, надеюсь, более актуален или полезен для тех, кто имеет аналогичную среду.

Детали Условия: (это то, что я использую)

  • играть 2.4.3 это поставляется с активатор-1.3.7-минимальный
  • JDK8, вы уже этого, как я не думаю, что эта версия игры работает с JDK7
  • MYSQL 5.7.9

приложение.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

Примечание:

  • testSchema в URL-это имя вашей базы данных, если вы используете что-то вроде MySQL workbench вы увидите это в разделе схемы. Я позвонил в свою testSchema. Другие могут назвать это что-то вроде "myDatabase"
  • порт должен быть портом MYSQL. Не ваш порт приложения. Я ставлю 3306 в Примере, потому что это обычно значение по умолчанию для MYSQL.

построить.СБТ

добавьте эту строку ниже в свою сборку.sbt файл. Это должно идти после libraryDependencies ++= Seq() декларации.

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

наконец-то

  • выполните эту команду из корня проекта ->activator reload
  • перезагрузка заявление

для проекта play java с использованием SBT

измените libraryDependency на llok, как это в "build.СБТ"

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

Запустите свой проект с помощью "activator run"

игры требуется коннектор JDBC.

у меня была такая же проблема в последней версии Play framework 2.4.x с активатором 1.3.6.

вот шаги. Я следовал описанным здесь шагам 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 и разрешит зависимости. Это важный шаг, который решил мою проблему.

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()