0

Я использую play java 2.5. Я создал базу данных со следующим java-кодом.Создать игру в базу данных java evolutions

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] 

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

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

ответ

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

Дополнительная информация here.

+0

Удивительно, спасибо за ответ, я попробую сейчас. –

0

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

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

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

+0

проблема кажется не в коде, потому что когда я пытаюсь соединиться с существующей базой данных, приложение не проблема, приложение загрузки нагрузки попробуйте подключиться к базе данных по умолчанию перед модулем OnStartupModule? Я не знаю об этом. Спасибо за комментарий. –

 Смежные вопросы

  • Нет связанных вопросов^_^