2015-12-15 46 views
0

我正在寻找一种方法来检查并创建PostgreSQL数据库,当我的Dropwizard应用程序启动时它不存在。我正在处理多个数据库,因此我们选择使用私有模块加载所有连接和持久性单元。我已经看过使用JDBI,但这似乎打破了我们想要采用私有模块的方法。我也阅读了使用Dropwizard Migrations,但看起来很沉重,这是我想避免的。如何使用Dropwizard自动创建数据库

如果我从一个空白数据库开始,Hibernate会创建我的模式,所以我唯一缺少的部分就是数据库自动创建,如果它不存在。

任何帮助表示赞赏!

回答

0

你将不得不至少有一个静态的连接,我相信。例如。如果你的数据库是:

jdbc:mysql://localhost:3306/X 
jdbc:mysql://localhost:3306/Y 

然后,你必须有到

jdbc:mysql://localhost:3306/ 

连接在你的启动代码,你将需要手动检查是否存在的所有数据库,如果他们不那么创建它们“T。之后,您可以加载其余的持久性上下文。

例如,关于如何用纯JDBC

public class DBTest { 

public static DataSource datasource() { 
    MysqlDataSource ds = new MysqlDataSource(); 
    ds.setUrl("jdbc:mysql://localhost/?" 
       + "user=root"); 
    return ds; 
} 


public static void main(String[] args) throws SQLException { 

    DataSource datasource = datasource(); 
    ResultSet executeQuery = datasource.getConnection().createStatement().executeQuery("Show databases;"); 

    List<String> tables = new ArrayList<>(); 

    while(executeQuery.next()) { 

     tables.add(executeQuery.getString(1)); 
    } 

    if(!tables.contains("MyNewDB")) { 
     datasource.getConnection().createStatement().execute("Create database MyNewDB;"); 
    } 

} 

}

EDIT为此快速片段:

作为正确地指出,上面是一个MySQL溶液。我安装了postgres并做了一个快速适应,所以这对我来说适用于postgres。主要问题是,没有“显示数据库”的postgres。替换(和连接等)修复。工作原理相同:

public static void main(String[] args) throws SQLException, ClassNotFoundException { 

     Class.forName("org.postgresql.Driver"); 
     Connection connection = null; 
     connection = DriverManager.getConnection(
      "jdbc:postgresql://localhost:5432/","artur", ""); 


     ResultSet executeQuery = connection.createStatement().executeQuery("SELECT datname FROM pg_database;"); 

     List<String> tables = new ArrayList<>(); 

     while(executeQuery.next()) { 

      tables.add(executeQuery.getString(1)); 
     } 



     if(!tables.contains("MyNewDB")) { 
      connection.createStatement().execute("Create database MyNewDB;"); 
     } 
     connection.close(); 

    } 

另请注意,jdbc部分(处理连接等)应妥善处理。它给出了正确的想法,我希望:)

+0

你能更具体吗?我没有安装postgres,并认为从sql的角度来看它应该是相同的。 – pandaadb

+0

对:)我写了相同代码的postgres版本。 – pandaadb

相关问题