void saveBatchStatisticValueSource_BatchPreparedStatement(final List<SQLStatValSourceDO> batch)
            throws SQLException {
        final LogExecutionTime logExecutionTime = new LogExecutionTime();

        try (final Connection connection = getConnection()) {
            try (final PreparedStatement preparedStatement = connection.prepareStatement(
                    SINGLE_INSERT_SQL)) {
                for (final SQLStatValSourceDO item : batch) {
                    setPreparedStatementParams(preparedStatement, item);
                    preparedStatement.addBatch();
                    preparedStatement.clearParameters();
                }

                preparedStatement.executeBatch();

                if (LOGGER.isDebugEnabled()) {
                    logDurationToDebug("saveBatchStatisticValueSource_PreparedStatement",
                            batch,
                            logExecutionTime);
                }
            }
        }
    }
Insert the batch using individual statements, but sent over the network as a batch.
MySQL will execute each one individually unless the MySQL prop 'rewriteBatchedStatements'
is set to on/1, thus it is 10-20x slower than the single statement approaches.

@param batch
@throws SQLException
stroom-statistics/stroom-statistics-impl-sql/src/main/java/stroom/statistics/impl/sql/SQLStatisticValueBatchSaveService.java