7

我目前正在做一个迁移项目,将数据从旧数据库迁移到新数据库(请不要问我为什么要为此使用 Java 应用程序,这是客户需要的)。

我现在正在更新一些初始代码。我正在改变的一件事是使用 SpringJdbcTemplate而不是那里的样板代码。

不幸的是,我还没有找到一种方法来执行分页查询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()只返回一个以纯 JDBC 代码创建的Connection对象(它不是 aSessionFactory或框架实现的一部分)。

然后我会遍历结果集,一次映射一行。有谁知道是否有一种简单的方法可以实现相同的功能JdbcTemplate

TIA

4

2 回答 2

6

我认为这样的应用程序的自然选择是Spring Batch(阅读令人印象深刻的功能页面

以下是与您相关的部分:

ItemReaders 和 ItemWriters > 数据库
,特别是JdbcPagingItemReader

于 2010-11-30T08:48:18.490 回答
1

你的意思是什么。像这样?

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")));
            }

        }
);
于 2010-11-25T17:12:56.577 回答