创建数据库玩java evolutions

时间:2016-09-09 15:42:04

标签: mysql playframework playframework-2.5 playframework-evolutions deadbolt-2

我正在使用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创建数据库,如何解决这个问题。

任何建议或不能这样做,请告诉我。 谢谢你的进步。

2 个答案:

答案 0 :(得分:2)

除了将数据库密钥移动到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中配置数据库一次,而不是将数据库配置硬编码到类中。

您可以找到更多信息here

答案 1 :(得分:0)

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

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

你已经把你的班级作为渴望的单身人士,所以它应该工作