我有一个 Java 应用程序,它使用 JDBC 将数据从遗留文件格式加载到 SQLite 数据库中。如果指定的数据库文件不存在,则应该创建一个新文件。目前,数据库的模式在应用程序中是硬编码的。我宁愿将它作为 SQL 脚本放在单独的文件中,但显然没有简单的方法通过 JDBC 执行 SQL 脚本。有没有其他方法或模式可以实现这样的目标?
最佳答案
您的句子 “现在有一种通过 JDBC 执行 SQL 脚本的简便方法” 让我困惑了一分钟,但我认为您是在说“没有 简单的方法"。 :)
根据其他人的说法,是的......完美的世界场景是使用 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) {
}
}
}
关于java - 使用 JDBC 创建数据库模式的模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2911806/