0

我正在使用玩 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();
    }
}

应用程序.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"

我的问题是,为什么要运行 web-app 创建

error Cannot connect to database [default]

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

任何建议或不能这样做,请告诉我。感谢提前。

4

2 回答 2

2

除了将数据库键移动到db.default命名空间之外,您还应该注入DatabaseOnStartup访问配置有这些属性的数据库。

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

libraryDependencies += javaJdbc

如果您已经在运行 activator,请确保使用该reload命令来获取对构建的更改。

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

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

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

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,而不是将数据库配置硬编码到一个类中。

您可以在此处找到更多信息。

于 2016-09-12T06:29:04.147 回答
0

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

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

你已经把你的班级变成了热切的单身人士,所以它应该可以工作

于 2016-09-09T20:58:28.153 回答