在Play framework 2.0中使用MySQL数据库所需的步骤

时间:2012-04-04 07:56:20

标签: java playframework playframework-2.0 ebean

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

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

10 个答案:

答案 0 :(得分:101)

从Play的文档中查看this page。它说:

  

除了h2内存数据库(主要用于开发模式),Play 2.0不提供任何数据库驱动程序。因此,要在生产中部署,您必须将数据库驱动程序添加为应用程序依赖项。

     

例如,如果您使用MySQL5,则需要为连接器添加依赖项:

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

SBT将为您下载驱动程序。您还应该查看section on managing dependencies

要连接到MySQL,您还需要更改application.conf中的一些设置:

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

答案 1 :(得分:94)

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

确保您在/project/Build.scala

中配置了相关性
val appDependencies = Seq(
    // Add your project dependencies here,
    "mysql" % "mysql-connector-java" % "5.1.18"
)

/conf/application.conf中添加DB的正确配置(替换默认的H2配置):

(不要从网址中删除编码):

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并要求你应用它。

答案 2 :(得分:10)

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

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

播放会自动下载驱动程序。似乎不再需要Build.scala了。应该像上面的评论员所提到的那样对application.conf进行更改。

答案 3 :(得分: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" by"默认"如果您想使用默认数据库或您想要使用的任何其他名称。替换" 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")
    }
    

    where" columnName"是要检索的数据库表列/字段的名称。

  6. 最后但并非最不重要,我想说明您可能希望通过调用 close()

    来关闭连接

答案 4 :(得分:6)

在我发现这个问题之前,我一直坚持使用我的MySQL配置。

最重要的事情来自@biesior回答:

  • 在项目的依赖项中添加MySQL连接器/ J(位于/project/Build.scala内)
  • 添加依赖项后,运行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数据库

它救了我的一天。

答案 5 :(得分:4)

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

1)在项目的依赖项中添加MySQL connector / 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)大多数Imp。在控制台中运行 reload 命令。

答案 6 :(得分:4)

播放2.4.3& MYSQL 5.7.9

我能够通过拼凑以前所有答案中的一些信息来实现这一目标。所以这是另一个,希望对具有类似环境的人更新或有用。

环境详细信息这就是我正在使用的

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

<强> appication.conf

strConnection = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
    "User ID=Admin;" & _
    "Data Source=" & accessFileName & ";" & _
    "Mode=Read;" & _
    "Extended Properties="""";" & _
    "Jet OLEDB:System database="""";" & _
    "Jet OLEDB:Engine Type=6;" & _
    "Jet OLEDB:Database Locking Mode=0;"
strCommand = "SELECT * FROM `tablename`"

注意:

  • URL中的testSchema是您的数据库名称,如果您使用MYSQL workbench之类的内容,您会在SCHEMAS部分下看到此内容。我打电话给我的testSchema。其他人可能称之为“myDatabase”
  • 端口应该是MYSQL端口。不是您的应用程序端口我在示例中放了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 ,因为这通常是MYSQL的默认值。

<强> build.sbt

将以下行添加到build.sbt文件中。这应该在3306声明之后。

libraryDependencies ++= Seq()

<强>最后

  • 从您的项目根运行此命令 - &gt; libraryDependencies += "mysql" % "mysql-connector-java" % "5.1.36"
  • 重新启动您的appplication

答案 7 :(得分:1)

使用SBT播放java项目

在&#34; build.sbt&#34;

中将libraryDependency更改为llok
libraryDependencies ++= Seq(
  javaJdbc,
  javaEbean,
  cache,
  javaWs,
  "mysql" % "mysql-connector-java" % "5.1.27"
)

使用&#34;激活器运行&#34;

运行项目

播放将需要jdbc连接器。

答案 8 :(得分:1)

我在使用激活器1.3.6的最新播放框架2.4.x中遇到了同样的问题。

以下是步骤。 我按照此处描述的步骤https://www.playframework.com/documentation/2.4.x/JavaDatabase

这是我的application.conf

&#13;
&#13;
# 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.*"]
&#13;
&#13;
&#13;

以下是build.sbt

&#13;
&#13;
libraryDependencies ++= Seq(
  javaJdbc,
  cache,
  javaWs,
  javaJpa,
  evolutions,
  "mysql" % "mysql-connector-java" % "5.1.27"
)
&#13;
&#13;
&#13;

plugins.sbt

&#13;
&#13;
// 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")
&#13;
&#13;
&#13;

这是重要的一步。

  

配置上述步骤后,转到命令行,停止激活器并运行命令activator run。在我的情况下,我一直收到错误unable to find mysql drivers。运行activator run后,激活器实际上会下载MySQL驱动程序并解决依赖关系。这是解决我的问题的重要一步。

答案 9 :(得分:1)

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