0

我使用的是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" 

我的问题是,为什么在运行Web应用程序内创建

error Cannot connect to database [default] 

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

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

回答

2

除了移动数据库键来db.default命名空间,你应该注入DatabaseOnStartup访问配置了这些属性的数据库。

首先,将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对象。

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,而不是硬编码DB配置为一类。

你可以找到更多的信息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之前?我不知道这件事。感谢您的评论。 –