Создание базы данных для воспроизведения Java-эволюций

Я использую игру 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"

Мой вопрос в том, зачем запускать создание веб-приложений

error Cannot connect to database [default]

Как это исправить, если я не хочу создавать базу данных с помощью mysql workbench.

Любое предложение или не может сделать это, пожалуйста, скажите мне. Спасибо за аванс.


person Chung Do    schedule 09.09.2016    source источник


Ответы (2)


Помимо перемещения ключей вашей базы данных в пространство имен db.default, вы должны внедрить Database в OnStartup для доступа к базе данных, настроенной с этими свойствами.

Во-первых, добавьте поддержку JDBC Play в 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, чтобы получить объект 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, вместо жесткого кодирования конфигурации БД в классе.

Дополнительную информацию можно найти здесь.

person Steve Chaloner    schedule 12.09.2016

Ключи вашей базы данных начинаются с default вместо db.default. Правильный синтаксис примерно такой:

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

Вы уже сделали свой класс нетерпеливым синглтоном, так что он должен работать

person Salem    schedule 09.09.2016
comment
проблема, кажется, не в коде, потому что, когда я пытаюсь подключиться к существующей базе данных, приложение не проблема, попробуйте загрузить приложение, попробуйте подключить базу данных по умолчанию перед модулем OnStartupModule? Я не знаю об этом. Спасибо за комментарий. - person Chung Do; 10.09.2016