2011-04-13 143 views
0

对不起,这个问题可能听起来很愚蠢,但我需要一些帮助!需要一些帮助!

我的项目是打开一个目录并列出所有的文件。这些是csv文件。每个文件都打开并且内容被加载到mysql数据库的表中。

所以我也做了上面的步骤,和我的Java代码工作正常。例如,我在目录中有3个文件。当我运行该项目时,3个文件中的每个文件中的值都被加载到mysql表中。

但是当我再次运行该程序,并检查使用Select语句的数据库,它让我看到重复的数据,因此6个文件值被加载。当我再次运行它时,数据库显示9个文件。但我不想再次添加文件。

因此,谁能告诉我如何做到这一点,而无需从目录中删除已添加的文件。

在此先感谢

+0

我已经包含主键。这没有发生过。我最近做了一些增强:从数据库中检索列值并将其显示在html文件中。从那时起,我的代码表现出这个问题。所以,我将项目代码重置为旧状态。但问题仍然存在。 – Anu 2011-04-13 07:54:56

+0

“对不起,这个问题可能听起来很愚蠢,......”甚至更糟糕的是,你忘了问一个问题。(需要说明不是问题。) – 2011-04-13 08:00:49

+0

好吧!真的对不起!!不会重复这个错误:) – Anu 2011-04-13 08:03:32

回答

1

在数据库和物理文件中也有唯一的文件标识符。

检查这一点,如果它存在,跳过其他执行DB操作

+0

谢谢。你可以请示例代码帮忙吗? – Anu 2011-04-13 09:44:00

+0

具体是什么?数据库相关或文件IO相关? – 2011-04-13 09:51:34

+0

如何在执行插入操作之前检查表中是否存在文件名?我有文件名值作为第二列。会像INSERT INTO TABLE_NAME(“no”,“name”,“add”)WHERE NOT EXISTS(SELECT name FROM TABLE_NAME WHERE name =“”);应该帮助实现这一目标 – Anu 2011-04-13 10:00:48

1

简单的方法:添加另一个表到数据库来记录已经处理这些文件的名称。

然后,写一个新的文件的内容到数据库之前:先检查这个表,如果文件名已经在名单上。


替代方法:记录最后一次“运行”的时间戳和所有运行,跳过那些“较旧”的文件。

但无论如何,你必须坚持某种标记的,因为你需要记住,到目前为止,你所做的事。

+0

好吧。谢谢你的帮助! – Anu 2011-04-13 10:18:47

0

另一列添加到这是您正在阅读的文件的文件名表。因此总共有2列,其中1为文件名,1为文件数据。

插入,查询,使用SELECT语句如果文件名已经阅读并插入之前。

+0

好的。谢谢你的帮助! – Anu 2011-04-13 10:19:38

0

您可以将其他信息存储到数据库中,您已经导入了哪些文件。 您可以在附加表中存储导入文件的名称和上次修改-属性,并在内容 -table中对其进行引用。 根据这些信息,您可以决定从目录中导入新文件的位置,或仅更新已导入文件的内容。

+0

好的。谢谢你的帮助! – Anu 2011-04-13 10:19:53