我需要从文件中读取大约 1 000 000 行数据并使用 Java 将数据上传到数据库中。以下是要求的详细信息和我已经编写的一些解决方案:
从文件(任何格式的 XML、平面文件、CSV)中读取数据。根据文件格式初始化类(使用工厂模式)。对于文本文件,我使用的是 BufferedReader,然后将创建的每个对象(例如员工)添加到列表中。同样,对于 XML,我正在使用 SAXParser,并且在从一个对象读取数据后将其添加到列表中。
但我认为我们不能保存或者我们应该在列表中保存 1 000 000 个对象。所以我需要在读取文件并且列表达到一定大小时将数据并行刷新到数据库中。这就是我卡住的地方。这应该如何处理?我是否应该运行一个并行线程,一旦列表大小达到 1000,它将更新数据库中的数据,同时读取文件的线程应该等待?DB 可以是任何数据库 Oracle/MS 访问。
下面是读取文本文件的代码:
public class FlatFileLoader implements Loader {
@Override
public List<Employee> readData(String path) {
try {
List<Employee> personList = new ArrayList<Person>();
FileReader fr = new FileReader(path);
BufferedReader br = new BufferedReader(fr);
String line=null;
while ((line = br.readLine()) != null) {
Employee person = scanLine(line, DataConstants.DELIMITER);
if(null != person)
personList.add(person);
}
br.close();
}
catch (IOException e) {
System.err.println(e);
}
return null;
}
private Employee scanLine(String recordLine, String delim) {
Employee person=null;
List data= new ArrayList();
StringTokenizer lineScanner = new StringTokenizer(recordLine, delim);
while (lineScanner.hasMoreElements()) {
String nextEle= (String) lineScanner.nextElement();
if(nextEle.equalsIgnoreCase("FIRST_NAME")){
break;
}
data.add(nextEle);
}
if(data.size() > 0){
DataUtil.populatedata(data);
}
return person;
}
}
方法
DataUtil.populatedata(data)
创建Employee
对象。那么我应该在哪里调用更新数据库中的数据呢?也欢迎任何改进上述代码的建议。