У меня есть следующий код. Он просто выполняет запрос, а затем импортирует его в другую базу данных, вторая часть не имеет значения в моем вопросе / проблеме. Как я вижу, по умолчанию jdbcTemplate.query () устанавливает Cursor перед первым элементом. Я не знаю, где моя ошибка, но этот код пропускает первую строку после начального состояния курсора элемента @first. Поэтому, когда while (resultSet.next ()) {начинает пропускать первый элемент ....
Я пытался заставить курсор перемещаться
resultSet.beforeFirst () ;
но выдает ошибку. В настоящее время я проверяю положение курсора перед l oop, и я также думаю о замене на do {} while ().
jdbcTemplate.query(sqlPull, resultSet -> {
List<List<Object>> batch = new ArrayList<>();
ResultSetMetaData metaData = resultSet.getMetaData();
int batchCount = 1;
int columnCount = metaData.getColumnCount();
if (resultSet.getRow() == 1) {
addAllColumnsToArray(resultSet, batch, columnCount);
}
while (resultSet.next()) {
addAllColumnsToArray(resultSet, batch, columnCount);
if (batch.size() >= 10000) {
callRestAPI(batch);
VaadinSqlApplication.logger.info("Commit batch: " + batchCount++);
insertTableToDb(sqlPush, push, batch);
batch.clear();
}
}
callRestAPI(batch);
VaadinSqlApplication.logger.info("Commit final batch. " + batchCount);
insertTableToDb(sqlPush, push, batch);
batch.clear();
});
....
private void addAllColumnsToArray(ResultSet resultSet, List<List<Object>> batch, int columnCount)
throws SQLException {
List<Object> row = new ArrayList<>();
for (int i = 1; i <= columnCount; i++) {
row.add(resultSet.getObject(i));
}
batch.add(row);
}