gpt4 book ai didi

java - 在 Java 中将具有不同布局的文件导入数据库

转载 作者:行者123 更新时间:2023-11-30 04:19:43 25 4
gpt4 key购买 nike

我需要使用 Java 和 Hibernate 将一个文本文件(其值由管道 ( | ) 分隔)导入到数据库中。该文本文件是在其他地方生成的,并具有以下布局:

示例文件.txt

|0150|A|B|C|
|0150|X|Y|Z|
|0190|1|2|
|0200|9|8|7|H|F|E|
  • 每一行对应一条记录。
  • 第一个值(即 0150、0190、0200)是其保存的信息类型(应存储到哪个表)。
  • 其余的值是要存储在该表中的值。

到目前为止,我已经能够读取这些行,找到记录对应的对象 - 使用工厂模式 - 将值分离到 String[] 数组中并调用方法 createInstance(String[] fields)创建对象并将其存储到数据库中 - 使用模板模式:

导入服务接口(interface)

public interface ImportServiceInterface {
public void createInstance(String[] fields);
}

抽象导入服务

public abstract class AbstractImportService implements ImportServiceInterface {
public static ImportServiceInterface getImportService(String line) {
// returns the correct subclass
}

public void import() {
createInstance(splitFields());
}

public String[] splitFields(String line) {
// splits the line
}
}

所以我有 3 个独立的服务,每个服务都实现自己的 createInstance(String[] fields) 版本:

导入示例类型服务

public ImportExampleTypeService implements AbstractImportService {
public void createInstance(String[] fields) {
ExampleModel myExample = new myExampleModel(); // mapped with Hibernate
// find which object members corresponds to the fields
// call the DAO to store the object
}
}

我的问题是用户将能够指定自己的布局:值对应于哪些字段、大小和位置。

我考虑创建一个表来存储布局,然后使用反射来匹配属性名称。

但是我一定错过了一些东西,也许有更简单的方法来做到这一点?

最佳答案

SuperCSV通过反射支持自定义分隔符和 Java 对象填充,因此我认为在这种情况下它会为您完成大部分工作。

此外,它支持标题行作为文件中第一行的概念,然后定义这些列映射到 java 对象中的哪些字段,或者您可以手动自定义列映射。

关于java - 在 Java 中将具有不同布局的文件导入数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17373165/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com