寻找存储文件名的正确解决方案

时间:2017-03-19 20:37:39

标签: java mysql database

刚开始我的爱好项目,现在我在这里获得帮助,使正确的数据库设计/查询。我制作了一个简单的Java程序,它循环通过文件夹的内容。我想将这个内容保存到MySQL数据库中,所以我在Java中添加了一个连接到我的数据库,创建了一个表,并在MySQL中创建了“file”,“path”和“id,”date“。

所以现在重要/有趣的事情,每当我想用Java将文件名添加到MySQL时我就这样做(当按下GUI按钮时我会调用一个方法):

  1. 删除具有相同文件路径的所有条目 - 这是为了确保我将获得与路径中的内容完全相同的新条目。
  2. Java循环:将文件信息插入文件添加到数据库时的列id,路径,文件名和日期。
  3. 通过这种方式,我始终可以确保将要添加到数据库中的文件名始终是最新的,如果我重命名文件或将其重新命名并不重要,它将是最新的,因为table将删除它的条目并写入新信息。旧信息 - >删除旧信息 - 插入新信息 - >向上的更新。

    我知道这可能不是最好的解决方案,但它确实有效,但现在我陷入了下一件我想做的事情。我想添加文件的差异,以便知道在两个插入之间添加和删除了哪些文件,这是我的问题,因为在新的INSERT我无法比较之前删除了条目。您将如何更改设计或解决方案?欢迎所有的想法,因为我很新鲜,如果你能告诉我查询的样子,我将非常感激。

2 个答案:

答案 0 :(得分:0)

请勿先删除所有行。只删除被删除的(或更好的事件,只需标记它们"不活动"正如我在下面建议的那样)。首先查询您的数据库,看看上次有什么。

我会在你的表中维护名为" inactive"的其他列。它默认为FALSE,删除文件为TRUE。请记住,由于您的文件由文件+路径+ id唯一标识,因此重命名任何文件确实是删除旧文件并创建新文件的操作。

从数据库中删除内容并不是一个好主意,因为您可能会偶然删除某些内容(代码中的错误),并且无法获取数据。

要做的其他事情是将哈希添加到您的表中。这样您就可以检查文件是否真的发生了变化。如果没有更改,则无需将文件重新添加到DB。有关详细信息,请参阅Getting a File's MD5 Checksum in Java

答案 1 :(得分:0)

实现此目的的一种方法是实施对表的审核。一种常见的方法是创建表的副本,在该表中存储文件夹内容,并使用约定命名该表以指示它正在存储审计信息(例如_AUD)。然后,您可以向AUD表添加其他列,例如“REV”(修订版),“REV_TYPE”(插入,删除,修改)。无论何时插入,更新或删除主表中的任何行,都会在AUD表中插入一行来描述您已完成的操作。然后,您可以通过在AUD表中查找与每个修订相关联的操作。提供此功能的java框架是hibernate envers(http://hibernate.org/orm/envers/)。