如何从文本文件中正确地将数据插入数据库

时间:2014-02-18 20:47:23

标签: java jdbc dao dto

简单的问题:任何想法应该如何正确完成?我有3个包含大量信息的txt文件,我创建了一个类,负责从txt文件中读取数据并将数据作为DTO组件列表返回(是的,信息可以捆绑为这样的逻辑单元) ,取决于txt文件,之后客户端将使用DAO并将使用此类列表并将数据插入本地数据库(sqlite)。我担心的是,拥有这样的List可能是内存要求,我是否应该避免使用这样的列表并以某种方式直接使用dao对象插入这些数据而不将数据捆绑到dto中,最后是这样的列表?

2 个答案:

答案 0 :(得分:0)

你问一个好问题并自己部分回答。 是的,确定如果您确实有很多信息,则不应从文件中读取所有信息,然后将其存储在数据库中。你应该读取chunk-by chunk信息,或者甚至可以(从应用程序的角度来看)逐行读取信息,并存储每一行​​是DB。

在这种情况下,您只需要随时为一行记忆。

您可以按照以下方式设计应用程序。

  • 返回Iterable<Row>
  • 的文件解析器
  • 接受Iterable<Row>并在DB中存储行的数据库编写器
  • 调用两者的经理。

在这种情况下,负责读写文件的逻辑将被封装到某些模块中,不需要额外的内存消耗。

答案 1 :(得分:0)

不返回列表,而是返回像此示例中的迭代器:Iterating over the content of a text file line by line - is there a best practice? (vs. PMD's AssignmentInOperand)

你必须修改这个迭代器以返回你的DTO而不是String:

for(MyDTO line : new BufferedReaderIterator(br)){
    // do some work
}

现在,您将逐行迭代文件,但是您将返回DTO而不是返回行。这种解决方案对内存的影响很小。