如何覆盖 Java 数据库?

How to overwrite a Java DB?

我的应用程序使用嵌入式 Java 数据库。 A similar question 询问如果目标数据库不存在,如何创建 Java 数据库;添加 create=true 属性会产生所需的结果,例如:

     conn = DriverManager.getConnection("jdbc:derby:mydatabase;create=true",props);

但我想覆盖数据库(如果存在)。我想我可以简单地删除并重新创建数据库的父目录。有更好的解决方案吗?

嵌入式 Derby 数据库完全包含在文件系统上的数据库文件夹中,因此删除该文件夹并使用 create=true 重新创建数据库完全没问题。

对数据库中的所有表(以及索引、视图等)发出 DROP TABLECREATE TABLE 语句也完全没问题。

两种方法都达到了结果。哪个 "better solution" 适合您的应用程序完全取决于您。

在我的应用程序中,我倾向于将 table/index/view/constraint DDL 语句从应用程序逻辑中分离出来,并且我也倾向于让这些 DDL 语句集合是幂等的;也就是说,那些 DDL 语句总是从删除前面的 table/view/index/etc 开始。对象,然后创建新对象,这样我就可以 运行 在应用程序开发过程中随时使用这些 DDL 语句从头开始重新创建我的数据库对象。

但您的应用程序可能不是这样的结构,在这种情况下,您可能会发现以物理方式删除整个目录文件夹会更容易。