- Чтение CSV-файла с удаленного сервера.
- Проверка формата ( длина, формат даты, формат чисел и т. д.) и наличие в базе данных (существуют ли данные в БД).
- Вставьте все действительные данные в БД.
< /ol>
До сих пор мой подход заключался в следующем: - Читать CSV-файл с однозначностью и зацикливать все строки. >
- Разделите строку по разделителю на отдельную переменную, проверьте каждую переменную (например, длину, формат даты, существуют ли данные в БД и т. д.) и добавьте в подготовленный оператор с помощью .addBatch()< /li>
Вставьте действительные данные с помощью .executeBatch()
Пример CSV:
Код: Выделить всё
ID|TransID|TransDate|TransAmount|TransType
123ABC1234|TRXL123456|25102024|000000016343100|N
Код: Выделить всё
public void consumeCsvFile() {
File[] listOfFiles = new File(outUrl).listFiles();
try {
for(File file : listOfFiles) {
try (Reader reader = new InputStreamReader(new FileInputStream(file), "UTF-8") ){
List parsedRows = parser.parseAll(reader);
for(String[] dataRow : parsedRows) {
boolean isValid = true;
String getData = dataRow[0];
String[] splittedData = getData.split("\\|");
List splittedDataList = new ArrayList(Arrays.asList(splittedData));
String id = "";
try { id = splittedDataList.get(0).trim(); } catch (Exception e) { }
String transId = "";
try { transId = splittedDataList.get(0).trim(); } catch (Exception e) { }
String transDate = "";
try { transDate = splittedDataList.get(0).trim(); } catch (Exception e) { }
String transAmount = "";
try { transAmount = splittedDataList.get(0).trim(); } catch (Exception e) { }
String transType = "";
try { transType = splittedDataList.get(0).trim(); } catch (Exception e) { }
if (transId.length() != 10) {
isValid = false;
}else{
boolean isTransIdExist = checkDataToDatabase(transId);
if(isTransIdExist) { isValid = false; }
}
boolean isIdExist = checkIfIdExistToDatabase(id);
if(isIdExist){ isValid = false; }
if(!validateDate(transDate)) {
isValid = false;
}
boolean isNumeric = false;
try{
Long.valueOf(transAmount);
isNumeric = true;
if(transAmount.length() != 15){ isValid = false; }
} catch(Exception ex){ isValid = false; }
if(isValid){
// here code to insert dataRow to Database.
}else{
// Data row not valid, add to list to write into ErrorFile in the end.
}
}
}
}
} catch (Exception e) {
throw new IllegalStateException("Unable to open input file", e);
}
}
private boolean validateDate(String dt) {
try {
if(dt.trim().length() != 8){
return false;
}else {
SimpleDateFormat sdf = new SimpleDateFormat("ddMMyyyy");
sdf.setLenient(false);
try{
Date javaDate = sdf.parse(dt);
}catch (Exception ex){
return false;
}
}
} catch (Exception ex){
return false;
}
return true;
}
Подробнее здесь: https://stackoverflow.com/questions/790 ... d-insert-v