91

我是 Play 框架的新手。我正在尝试将 MySQL 数据库配置为与 Play Ebeans 一起使用的数据源。

您能否解释一下使用 Play 2.0 框架配置 MySQL 所需的步骤(例如,下载驱动程序、添加依赖项等)。

4

10 回答 10

103

从 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"
于 2012-04-04T08:03:28.597 回答
94

正如 Carsten 所写,它可以从文档中获取,但是这里有一个摘要:

确保您已在其中配置了依赖项/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.*"

就是这样,重新启动您的应用程序(或在开发模式下运行),然后它将创建一个 DDL 并要求您应用它。

于 2012-04-04T08:31:30.753 回答
10

我正在使用 play 2.2.0,我只需将以下行添加到项目根文件夹中的 build.sbt 中。

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

并播放自动下载驱动程序。似乎不再需要 Build.scala 了。如上述评论员所述,应应用对 application.conf 的更改。

于 2013-11-12T09:22:05.800 回答
8

我遇到的大多数访问 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 地址(如果是外部数据库)或本地数据库的 localhost(或 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”是您要检索的数据库表列/字段的名称。

最后但并非最不重要的一点是,我想指出您可能希望通过调用close()来关闭连接

于 2014-08-21T11:35:04.167 回答
7

在我找到这个之前,我一直坚持我的 MySQL 配置。

最重要的事情取自@biesior 答案:

  • 在项目的依赖项中添加 MySQL 连接器/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

它拯救了我的一天。

于 2013-03-19T00:41:04.763 回答
5

播放 2.4.3 和 MYSQL 5.7.9

通过将所有先前答案的信息拼凑在一起,我能够完成这项工作。所以这是另一个,希望对那些有类似环境的人来说是最新的或有用的。

环境细节:(是我正在使用的

  • 玩 2.4.3 这个自带activator-1.3.7-minimal
  • JDK8,你应该已经有了这个,因为我认为这个版本的 play 不适用于 JDK7
  • MYSQL 5.7.9

应用程序配置文件

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 的默认设置。

构建.sbt

将此行添加到您的 build.sbt 文件中。这应该在libraryDependencies ++= Seq()声明之后进行。

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

最后

  • 从项目根目录运行此命令 ->activator reload
  • 重新启动您的应用程序
于 2015-12-09T18:15:32.730 回答
4

对于播放 2.3.1,请按照以下步骤操作。

1)在项目的依赖项中添加MySQL连接器/J(在/project/build.sbt中)

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) 大多数印象。在控制台中运行重新加载命令。

于 2014-06-27T00:56:30.407 回答
1

使用 SBT 玩 java 项目

在“build.sbt”中将 libraryDependency 更改为 llok

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

使用“activator run”运行你的项目

播放将关闭所需的 jdbc 连接器。

于 2015-04-25T06:41:29.507 回答
1

我在带有激活器 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 驱动程序并解决依赖关系。这是解决我的问题的重要一步。

于 2015-11-14T08:26:34.550 回答
1

对我来说,这项工作,请将以下行添加到您的依赖项中:

"mysql" % "mysql-connector-java" % "5.1.36"

这是代码:

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()
于 2016-02-12T07:58:39.590 回答