jdbctemplate запрос курсора не перед первой строкой - PullRequest
0 голосов
/ 08 января 2020

У меня есть следующий код. Он просто выполняет запрос, а затем импортирует его в другую базу данных, вторая часть не имеет значения в моем вопросе / проблеме. Как я вижу, по умолчанию 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);
}
...