我有一个Java应用程序,它使用JDBC将遗留文件格式的数据加载到SQLite数据库中。如果指定的数据库文件不存在,则应该创建一个新文件。目前,数据库的模式在应用程序中是硬编码的。我宁愿把它作为SQL脚本放在一个单独的文件中,但显然没有简单的方法来通过JDBC执行SQL脚本。有没有其他方式或模式可以实现这样的目标?
答案 0 :(得分:5)
你的句子“现在有了简单的方法来执行SQL脚本,虽然JDBC”让我困惑了一分钟,但我想你是在说“有没有< / strong>简单方法“。 :)
根据其他人的说法,是的......完美的世界场景是使用ORM工具,比如Hibernate,但我也理解当你在工作中处理遗留的东西时,你的团队可能不想花太多时间重构那个项目。
我同意您应该将数据库架构重构为单独的文件。您实际上可以使用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) {
}
}
}
答案 1 :(得分:0)
答案 2 :(得分:0)
如果您在开发环境中工作,我建议您使用像Hibernate这样的ORM工具,它会根据您的Java Domain Models转发工程师来创建数据库表。 Hibernate具有自动创建/更新表的功能,以防数据库模式发生更改。
当您使用SQLite时,您可以查看Hibernate for SQLite
我在某处读过,不建议在生产环境中使用此功能,因为增量表创建可能会对现有数据产生负面影响。