2010-05-26 63 views
1

我有一个Java应用程序,它使用JDBC将旧数据格式的数据加载到SQLite数据库中。如果指定的数据库文件不存在,则应该创建一个新文件。目前数据库的模式在应用程序中被硬编码。我宁愿将它作为一个SQL脚本放在单独的文件中,但显然,通过JDBC执行SQL脚本并不容易。有没有其他方式或模式来实现这样的事情?使用JDBC创建数据库模式的模式

回答

4

你一句“现在有简单的方法,虽然JDBC来执行SQL脚本”搞糊涂了一分钟,但我认为你说的“有没有简单的方法”。 :)

根据别人的说法,是的......完美的世界场景是使用像Hibernate这样的ORM工具,但是我也明白当你在工作中处理遗留问题时,你的团队可能会不想花太多时间重构该项目。

我同意你应该将数据库模式重构成单独的文件。您可以使用JDBC实际执行SQL脚本。当我运行某些测试案例时,我一直这样做。

下面是我如何做到这一点。我使用SQL Server数据库。所以,你需要调整代码以适应你的需求。

String ddl = ... // load your SQL script file into this string 
String delimiter = "GO"; // in my case, SQL Server uses GO as delimiter, you use whatever you want here. 


private void executeDDL(String ddl, String delimiter) { 
    Connection con = null; 

    try { 
     con = ... // get the connection 

     // enable transaction 
     con.setAutoCommit(false); 

     Statement statement = con.createStatement(); 

     // for every DDL statement, execute it 
     for (String sql : ddl.split(delimiter)) { 
      if (StringUtils.isNotBlank(sql)) { 
       statement.executeUpdate(sql); 
      } 
     } 

     statement.close(); 
     con.commit(); 
    } 
    catch (Exception e) { 
     e.printStackTrace(); 
    } 
    finally { 
     try { 
      con.close(); 
     } 
     catch (Exception ignored) { 
     } 
    } 
} 
+0

谢谢你的解决方案,好像我会用这个去的。不过,我希望有某种感觉不那么黑客的方式。 – 2010-05-26 16:37:38

0

“正确”的方式是使用Hibernate。在所有其他好处中,它能够自动创建/更新数据库模式(SO1,SO2)。

0

如果您在开发环境中工作,我会建议您使用像Hibernate这样的ORM工具,根据您的Java域模型转发工程师来创建数据库表。 Hibernate具有自动创建/更新表的功能,以防数据库模式发生变化。

当你正在使用SQLite,你可以看看Hibernate for SQLite

我已经读的地方,它不建议使用此功能在生产环境中,因为增量表创建可能会在现有的数据产生负面影响。