Вы можете использовать apache-commons-csv для получения значений из строк csv
Reader reader = new BufferedReader(new InputStreamReader(csvFileInputStream));
CSVParser csvParser = new CSVParser(reader, CSVFormat.DEFAULT.withIgnoreEmptyLines().withFirstRecordAsHeader().withIgnoreHeaderCase().withTrim()));
Это заставит библиотеку обрабатывать первую строку как заголовки столбцов, а затем вы можете обрабатывать строки как
List<CSVRecord> csvRecords = csvParser.getRecords();
for(CSVRecord csvRecord : csvRecords) {
String id= csvRecord.get("ID");
String costType = csvRecord.get("Cost Type");
String costYear = csvRecord.get("Year");
//Construct your query here
}
Вы всегда можете выполнить запрос подсчета, чтобы проверить, существует ли запись в базе данных, как:
String query = "SELECT COUNT(*) FROM UPLOAD WHERE ID='"+ID+"' AND AMOUNT_TYPE='"+costType+"' AND COST_YEAR='"+costYear+"'";
Если возвращенное число равно 1 или более, вы можете быть уверены, что оно существуетв базе данных и при необходимости выполните действия.
Еще одна вещь, которую можно сделать, - это (если уже существующая запись не вносит вклад в данные новых записей), вместо того, чтобы использовать запрос выбора, вы всегда удаляетезапись перед вставкой (если запись не существует, ничего не произойдет) как:
String query = "DELETE FROM UPLOAD WHERE ID='"+ID+"' AND AMOUNT_TYPE='"+costType+"' AND COST_YEAR='"+costYear+"'";
, а затем запустит запрос вставки, это гарантирует, что запись никогда не будет вставлена дважды.