Java 将不同的数据(以多种格式)持久化到公共db表中的最佳方法是什么?
我有CSV文件中的数据。每个CSV不同于其他CSV,即列名不同。例如,在FileB中,唯一标识符称为ID,但在FileB中称为UID。类似地,在文件中,金额称为AMT,但在文件B中,金额称为CUST_AMT。含义相同,但列名不同 我想创建一个通用解决方案,将CSV文件中的各种数据保存到DB表中。解决方案必须考虑将来可能提供的其他格式Java 将不同的数据(以多种格式)持久化到公共db表中的最佳方法是什么?,java,design-patterns,csv,Java,Design Patterns,Csv,我有CSV文件中的数据。每个CSV不同于其他CSV,即列名不同。例如,在FileB中,唯一标识符称为ID,但在FileB中称为UID。类似地,在文件中,金额称为AMT,但在文件B中,金额称为CUST_AMT。含义相同,但列名不同 我想创建一个通用解决方案,将CSV文件中的各种数据保存到DB表中。解决方案必须考虑将来可能提供的其他格式 对于这种情况,有没有最好的方法?有很多解决方案。但我认为最简单的方法可能是生成从每个输入文件格式到组合行格式的映射。您可以创建具有列名到数据库字段名映射的配置文件,
对于这种情况,有没有最好的方法?有很多解决方案。但我认为最简单的方法可能是生成从每个输入文件格式到组合行格式的映射。您可以创建具有列名到数据库字段名映射的配置文件,并创建一个程序,在给定CSV和映射文件的情况下,该程序可以将所有数据插入数据库 但是,对于要添加的每一个新列,仍然必须更改表 更多的设计工作需要更多关于数据进入数据库后如何使用的细节。我可以在执行开始时想到“责任链”模式。因此,您读取了头文件,并让责任链为该文件获取适当的解析器 代码可能如下所示:
interface Parser {
// returns true if this parser recognizes this format.
boolean accept(String fileHeader);
// Each parser can convert a line in the file into insert parameters to be
// used with PreparedStatement
Object[] getInsertParameters(String row);
}
这允许您通过向链中添加新的解析器对象来添加新的文件格式
您首先应按如下方式初始化链:
List<Parser> parserChain = new ArrayList<Parser>();
parserChain.add(new ParserImplA());
parserChain.add(new ParserImplB());
parserChain.add(new ParserImplB());
....
// read the header row from file
Parser getParser (String header) {
for (Parser parser: parserChain) {
if (parser.accept(header)
return parser;
}
throw new Exception("Unrecognized format!");
}
然后,您可以创建一个准备好的语句,用于将行插入表中。
处理每一行文件将是:
preparedStatement.execute(parser.getInsertParameters(row));
在将数据保存到数据库之前,您有权处理数据吗?是的,我有权访问和完全控制点CSV文件的流,可以将其保存到数据库中,列顺序、值格式也可以不同吗?