my problem is as follows:
The CSV file is downloaded at given intervals from server.
File has to be parsed (there are unnecessary spaces tha
I think the best way in your case is to use Statement batching here is an example :
sqlConnection.setAutoCommit(false);//<<------------
try {
preparedStatement = sqlConnection.prepareStatement(sqlString);
while ((csvLine = bufferedReader.readLine()) != null) {
String[] splitLine = csvLine.split(";");
preparedStatement.setBigDecimal(1, new BigDecimal(splitLine[4].trim()).setScale(2, RoundingMode.CEILING));
preparedStatement.setBigDecimal(2, new BigDecimal(splitLine[5].trim()).setScale(2, RoundingMode.CEILING));
preparedStatement.setInt(3, Integer.parseInt(splitLine[6].trim()));
preparedStatement.setString(4, splitLine[2].trim());
preparedStatement.setString(5, splitLine[8].trim());
preparedStatement.addBatch();//<<-----------add a batch
}
//execute your multiple statement as one
statement.executeBatch();//<<------------
sqlConnection.commit();//<<--------------
}
EDIT
Like @Mick Mnemonic mention in comment :
You could try if splitting into smaller batches of say 500 rows makes any difference
So instead to execute your batch in one shot you can split your batch in small batches for example :
sqlConnection.setAutoCommit(false);
try {
int nbrBatch = 500;
int count = 0;
preparedStatement = sqlConnection.prepareStatement(sqlString);
while ((csvLine = bufferedReader.readLine()) != null) {
//Your code here
preparedStatement.addBatch();
if (count % nbrBatch == 0) {
statement.executeBatch();
}
count++;
}
//rest of your batch not executed
statement.executeBatch();
sqlConnection.commit();
}