我有一个Java应用程序,它使用JDBC将旧数据格式的数据加载到SQLite数据库中。如果指定的数据库文件不存在,则应该创建一个新文件。目前数据库的模式在应用程序中被硬编码。我宁愿将它作为一个SQL脚本放在单独的文件中,但显然,通过JDBC执行SQL脚本并不容易。有没有其他方式或模式来实现这样的事情?使用JDBC创建数据库模式的模式
1
A
回答
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
0
如果您在开发环境中工作,我会建议您使用像Hibernate这样的ORM工具,根据您的Java域模型转发工程师来创建数据库表。 Hibernate具有自动创建/更新表的功能,以防数据库模式发生变化。
当你正在使用SQLite,你可以看看Hibernate for SQLite
我已经读的地方,它不建议使用此功能在生产环境中,因为增量表创建可能会在现有的数据产生负面影响。
相关问题
- 1. 创建数据库模式
- 2. 使用jdbc创建db2模式
- 3. 使用MySQL Workbench从现有模式/模型创建数据库
- 4. 创建模式时指定数据库
- 5. 从DataTable创建数据库模式
- 6. Flyway:init不会创建模式数据库
- 7. 实时创建数据库模式
- 8. 错误创建oozie数据库模式
- 9. 数据库模式比较 - 创建表
- 10. 使用JDBC连接到不同数据库的模式
- 11. 从应用程序模型创建数据库模式与否?
- 12. 嵌入式OrientDB分布式模式 - 未能创建数据库
- 13. 从电影数据库创建数据库模式
- 14. 使用docker-compose创建一个MySQL模式/数据库
- 15. 如何使用浮油创建数据库模式?
- 16. Codeigniter 3 - 如何使用Forge Class创建数据库模式?
- 17. 创建使用JSON模式
- 18. 数据库模式
- 19. 数据库模式
- 20. 使用模板模式创建数据访问层
- 21. 使用SQLAlchemy的Oracle数据库模式
- 22. 春季启动。 @DataJpaTest H2嵌入式数据库创建模式
- 23. 以编程方式创建Oracle数据库和模式ADO.NET
- 24. MVC仓库模式:创建模型类
- 25. 根据模式创建数据文件
- 26. 数据库模式的建议值
- 27. Mongoose:建议的数据库模式
- 28. 创建数据库文件,无数据/模式
- 29. 为大型数据集创建MySQL数据库模式
- 30. 数据库模式库
谢谢你的解决方案,好像我会用这个去的。不过,我希望有某种感觉不那么黑客的方式。 – 2010-05-26 16:37:38