有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java我应该在代码中自动创建DB表,还是在安装过程中使用preinit?

我有一个Java应用程序,它使用带有嵌入式驱动程序的ApacheDerby数据库。现在,在安装过程中,我运行了SQL创建脚本

因此,当应用程序启动时,表已经存在。最近,我开始认为最好将我的SQL脚本放在类路径中,加载它,并执行所有语句,以便在启动时创建表。数据库本身可以在丢失时自动创建,因此这似乎是引导表的一种不太容易出错的方法

我的问题是:在应用程序启动时检测存在/创建表的过程中,与期望我的安装正确设置表相比,我可能会遇到任何问题吗


共 (3) 个答案

  1. # 1 楼答案

    我认为为用户决定什么对他最好是个坏主意。假设应用程序在错误的数据库上意外启动。您真的希望应用程序在这个错误的数据库上创建表吗

    相反,警告用户未找到数据库表,并向用户提供创建数据库表的选项,例如,告诉用户应使用的特定命令行选项(例如/CREATETABLES)启动应用程序,向用户显示一个对话框,用户可以在其中选择创建表

    如果用户不能创建表,但另一个负责人(管理员、关键用户)应该创建表,那么事情可能会变得更加复杂。在这种情况下,您可以给出一个错误代码,并将用户指向该负责人

  2. # 2 楼答案

    我将依赖于它们在安装过程中发生。如果您在启动期间自动创建它们,那么您必须担心多个并发启动,这种情况在安装期间发生的可能性要小得多(并且您的安装程序框架可能已经处理了这种情况)

  3. # 3 楼答案

    我认为您的第一步应该是在安装期间构建它们,并在运行时优雅地失败。然后,优雅地充实失败部分,使其自我修复

    在IMO看来,检测和处理过程中的错误条件总是比假设(预期)和崩溃更好

    我主张不要“期望”安装程序正确设置表。我不是说你不应该在安装过程中设置数据库。我提倡的是验证数据库完整性的代码。如果您有验证模式存在和设计的代码,并且可以修复/重建,那么您就不必担心安装是否正确设置了所有内容。这并不意味着您不应该在安装过程中进行创建,尤其是在速度较慢的情况下

    我知道这些天我开发的很多应用都基于应用版本内置了迁移。基本上,当应用程序启动时,它会经历一个DB验证/验证周期,确定数据库的状态,并根据数据库版本和代码版本执行相关迁移

    这要求您在上下迁移(或者,如果您永远不需要重新进行迁移,则只进行上下迁移)时非常勤奋,但我发现这是一个非常灵活和有用的解决方案。当然,您需要它对多个初创公司、用户配置差异具有鲁棒性,并且能够优雅地处理错误情况,但在我看来,这是该课程的标准。p>