Постраничные запросы с JdbcTemplate - PullRequest
7 голосов
/ 25 ноября 2010

В настоящее время я работаю над проектом миграции, чтобы перенести данные из старой базы данных в новую (пожалуйста, не спрашивайте, почему я прохожу через это Java-приложение, это то, что требуется заказчику).

Был некоторый исходный код, который я сейчас обновляю.Одна из вещей, которые я изменяю, - это использование JdbcTemplate Spring, а не кода, который был там.

К сожалению, я пока не нашел способа выполнять постраничные запросы на JdbcTemplate, аналог старого кода:

Statement statement = getConnection().createStatement(
    ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
statement.setFetchDirection(ResultSet.FETCH_FORWARD);
statement.setFetchSize(1000);
return statement.executeQuery();

getConnection() просто возвращает Connection объект, созданный в виде простого кода JDBC (он не является частью SessionFactory или реализацией платформы).

Затем я бы перебрал набор результатов, отображая строки по одной за раз.Кто-нибудь знает, есть ли простой способ добиться такой же функциональности с JdbcTemplate?

TIA

Ответы [ 2 ]

6 голосов
/ 30 ноября 2010

Я думаю, что естественным выбором для такого Приложения является Spring Batch (прочитайте впечатляющую страницу Характеристики )

Вот разделы, которые должны иметь отношение к вам:

ItemReaders и ItemWriters> База данных
и в частности JdbcPagingItemReader

1 голос
/ 25 ноября 2010

Вы имеете в виду что-н.как это?

SimpleJdbcTemplate template = new SimpleJdbcTemplate(dataSource);

List<String> result = template.query("SELECT name FROM people WHERE id > ?",
    new RowMapper<String>() {

        public String mapRow(ResultSet rs, int rowNum) throws SQLException {
            return rs.getString("name");
        }

    }, 666
);

Или это:

template.getJdbcOperations().query("SELECT name FROM people WHERE id > ?",
        new Object[] { 666 },
        new RowCallbackHandler() {

            public void processRow(ResultSet rs) throws SQLException {
                System.out.println(String.format(
                    "Got '%s'", rs.getString("name")));
            }

        }
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...