【发布时间】:2020-08-27 11:51:45
【问题描述】:
我正在使用以下代码在 Oracle 中使用 jOOQ 插入来自大型 csv(100,000 条记录)的记录。 这是sn-p:
CSVReader csvReader = null;
String csvError;
try {
csvReader = new CSVReader(new FileReader(tempFile));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
//delete previous uploaded stuff from the same user
clearTable(user.getUserId());
List<BSearchRecord> records = new ArrayList<>();
boolean isFirst = true;
while (csvReader.hasNext()) {
if(isFirst) {
//validate headers
String[] headers = csvReader.next();
uploadedHeaders = headers;
csvError = validateHeadersLength(headers);
if(csvError != null) {
return csvError;
}
for(int i=0; i<headers.length; i++) {
csvError = validateEachHeader(i, headers[i]);
if(csvError != null) {
return csvError;
}
}
isFirst = false;
continue;
} else {
String[] row = csvReader.next();
if(row != null) {
BSearchRecord bSearchRecord = new BSearchRecord();
bSearchRecord.set(RET_BSEARCH.UPLOADEDBY, user.getUserId());
for(int i=0; i<csvHeaders.length; i++){
Field field = bSearchRecord.field(backendColumns[i]);
bSearchRecord.set(field, row[i]);
}
records.add(bSearchRecord);
}
}
}
db.batchInsert(records).execute(); // IS THIS OKAY ? (is this batch enabled?)
我遇到了一些建议,例如:PostgreSQL/JooQ bulk insertion performance issues when loading from CSV; how do I improve the process?
但是,我的用例有点不同,所以问这个只是为了得到一个建议,我是否以正确的方式做这件事?
另外,您能否建议,jOOQ 中的 batchInsert(..) 实现是否支持批处理执行? (在文档中,我看到了 .bind(..) 方法,所以为了清楚起见询问)
【问题讨论】:
标签: java oracle jooq csvreader