Рубрики
Без рубрики

Пружинный JdbcTemplate Обрабатывает Большой набор результатов

– Пружинная табличка JdbcTemplate Обрабатывать Большой Набор Результатов

Пружина JdbcTemplate пример получения большого Результирующего набора

P.S Протестирован с Java 8 и весенним ВЫПУСКОМ JDBC 5.1.4.

1. Получите большой результирующий набор

1.1 Ниже приведен классический findAll для получения всех данных из таблицы.

    public List findAll() {
        return jdbcTemplate.query(
                "select * from books",
                (rs, rowNum) ->
                        new Book(
                                rs.getLong("id"),
                                rs.getString("name"),
                                rs.getBigDecimal("price")
                        )
        );

    }

Запустите его, для небольших данных, без проблем.

	List list = bookRepository.findAll();

	for (Book book : list) {
		//process it
	}

Если таблица содержит более миллионов данных, Сопоставитель строк в Метод findAll будет занят преобразованием объектов и помещением всех объектов в Список , если размер объекта больше, чем пространство кучи Java, см. Ниже Ошибку:

java.lang.OutOfMemoryError: Java heap space

2. Решение

Мы можем увеличить размер кучи, но лучшим решением будет использовать RowCallbackHandler для обработки большого Результирующего набора для каждой строки.

import org.springframework.jdbc.core.RowCallbackHandler;

	jdbcTemplate.query("select * from books", new RowCallbackHandler() {
		public void processRow(ResultSet resultSet) throws SQLException {
			while (resultSet.next()) {
				String name = resultSet.getString("Name");
				// process it
			}
		}
	});

Скачать Исходный Код

Рекомендации

Оригинал: “https://mkyong.com/spring/spring-jdbctemplate-handle-large-resultset/”