我有一个Java应用程序,它使用带有嵌入式驱动程序的Apache Derby数据库。现在,在安装中,我运行了SQL创建脚本。
因此,当应用程序启动时,表已经存在。最近我开始认为最好将我的SQL脚本放在类路径或其他东西中,加载它并执行所有语句,以便在启动时创建表。如果丢失数据库本身可以自动处理,所以这似乎是一种不太容易出错的引导表的方法。
我的问题是:我是否可能遇到在应用程序启动时检测存在/创建表的任何问题,并期望通过我的安装正确设置它们?
答案 0 :(得分:1)
我认为您的第一步应该是在安装期间构建它们并在运行时优雅地失败。然后充实失败的优雅部分进行自我修复。
检测和处理过程中的错误条件,IMO总是好于假设(期待)和崩溃。
我主张不要通过安装正确设置“期望”表。我不是说你不应该在安装过程中设置数据库。我所倡导的是验证数据库完整性的代码。如果您有用于验证架构的存在和设计并且可以修复/重建的代码,那么您无需担心安装是否正确设置了所有内容。这并不意味着你不应该在安装过程中进行创建,特别是如果它很慢。
我知道我现在开发的很多应用都内置了基于应用版本的迁移。基本上,当应用程序启动时,它会经历数据库验证/验证周期,确定数据库的状态,并根据数据库版本和代码版本执行相关的迁移。
这需要你勤奋上下迁移(或者只是向上,如果你永远不需要回头)但我发现它是一个非常灵活和有用的解决方案。当然,您需要它能够抵御多个初创公司,用户配置差异以及能够优雅地处理错误情况,但在我看来,这对于课程而言是相同的。
答案 1 :(得分:0)
我会依赖它们在安装过程中发生。如果在启动期间自动创建它们,则必须担心多个并发启动,这种情况在安装期间不太可能发生(以及安装程序框架可能已经处理的情况)。
答案 2 :(得分:0)
我认为为用户决定什么是最适合他的是一个坏主意。想象一下,应用程序是在错误的数据库上意外启动的。您真的希望应用程序在这个不正确的数据库上创建表吗?
相反,警告用户没有找到数据库表,并为他提供创建它们的选项,例如:通过告诉他应该使用特定的命令行选项(例如/ CREATETABLES)启动应用程序,向他显示一个对话框,在该对话框中他可以选择创建表格。
如果用户不得创建表,则可能会变得更复杂,但另一个负责人(管理员,关键用户)应该创建表。在这种情况下,您只需提供错误代码并将用户指向此负责人。