Java 如何正确地将数据从txt文件插入数据库

Java 如何正确地将数据从txt文件插入数据库,java,jdbc,dao,dto,Java,Jdbc,Dao,Dto,简单的问题:你有没有想法如何正确地做到这一点?。我有3个包含大量信息的txt文件,我创建了一个类,负责从txt文件中读取数据,并将数据作为DTO组件列表返回(是的,信息可以作为这样的逻辑单元捆绑),具体取决于txt文件,之后,客户机将使用DAO并使用这样的列表,然后将数据插入本地数据库(sqlite)。我担心的是,拥有这样一个列表可能会占用大量内存,我是否应该避免使用这样的列表,并以某种方式使用dao对象直接插入此数据,而不将数据绑定到dto,最后是这样的列表?您提出了一个很好的问题,并且自己部

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

您提出了一个很好的问题,并且自己部分回答了这个问题。 是的,当然,如果您确实有很多信息,您不应该从文件中读取所有信息,然后将其存储在数据库中。您应该一块一块地读取信息,或者即使可能(从应用程序的角度来看),也应该一行一行地读取信息,并将每一行存储为DB

在这种情况下,任何时候都只需要一行的内存

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

  • 返回
    Iterable
  • DB writer,它接受
    Iterable
    并在DB中存储行
  • 两人都打电话的经理

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

不要返回列表,而是像本例中那样的迭代器:

您必须修改此迭代器以返回DTO而不是字符串:

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

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

您的文件有多大?如果它们太大而无法存储在内存中,那么你必须将它们分块处理。你试过了吗?这听起来像是你试图在不采取“幼稚”方法的情况下进行优化。有时候,天真就足够了。如果您已经尝试过,并且确定它在客户端机器上太慢或要求太高,请发布一些代码。我想使用我的DAO作为我的“管理器”,从某种意义上说,它们将“在DB中存储行”(在我的第一种方法中,行实际上是DTO),这与您建议的相同吗?不,不是,我再次阅读,现在我明白了,很抱歉,我不能投票给你,但非常感谢。我在想同样的方法,我会让我的客户创建一些对象或使用某种方法创建这样的循环,最终通过这样的dto和我的dao插入数据。我想我会把你的答案和AlexR的“对不起,我不能投票给你”结合起来。我没有看到第一个答案——它一定是平行发布的。至少两种观点是相同的。