创建数据库 play java evolutions

Create database play java evolutions

我正在使用 play java 2.5。 我使用以下 java 代码创建了一个数据库。

public OnStartup() throws SQLException {
    //demo create database with java code
    Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/?user=root&password=12345678");
    Statement s = con.createStatement();
    int Result = s.executeUpdate("CREATE DATABASE recruit3");
}

模块:

public class OnStartupModule extends AbstractModule {
    @Override
    public void configure() {
        bind(OnStartup.class).asEagerSingleton();
    }
}

application.conf:

play.modules {
    enabled += "be.objectify.deadbolt.java.DeadboltModule"
    enabled += modules.CustomDeadboltHook
    enabled += modules.OnStartupModule 
}

default.driver=com.mysql.jdbc.Driver
default.url="jdbc:mysql://localhost:3306/recruit3"
default.username=root
default.password="12345678"

我的问题是,为什么 运行 网络应用程序创建

error Cannot connect to database [default]

如何解决这个问题,如果我不想使用 mysql workbench 创建数据库。

有什么建议或者不能这样做,请告诉我。 感谢提前。

您的数据库键以 default 开头,而不是 db.default。正确的语法是这样的:

db {
    default {
        driver=com.mysql.jdbc.Driver
        url="jdbc:mysql://localhost:3306/recruit3"
        username=root
        password="12345678"
    }    
}

您已经将 class 设置为热切的单身人士,所以它应该可以工作

除了将数据库密钥移动到 db.default 命名空间外,您还应该将 Database 注入 OnStartup 以访问使用这些属性配置的数据库。

首先,将 Play 的 JDBC 支持添加到 build.sbt

libraryDependencies += javaJdbc

如果您已经是 运行 激活者,请确保您使用 reload 命令获取对构建的更改。

更新您的 application.conf 以将数据库配置放入正确的命名空间。

db {
  default {
    driver=com.mysql.jdbc.Driver
    url="jdbc:mysql://localhost:3306/recruit3"
    username=root
    password="12345678"
  }    
}

最后,更新 OnStartup 以接收将由 Play 注入的 Database 对象。

import javax.inject.Inject;
import play.db.Database;

public class OnStartup {

    @Inject
    public OnStartup(final Database db) throws SQLException {
        db.withConnection((Connection conn) -> {
            final Statement s = con.createStatement();
            return s.executeUpdate("CREATE DATABASE recruit3");
        });
    }
}

这允许您在 application.conf 中一次性配置数据库,而不是将数据库配置硬编码到 class。

您可以找到更多信息here