Java 使用JdbcTemplate的分页查询
我目前正在进行一个迁移项目,将数据从旧数据库迁移到新数据库(请不要问我为什么要使用Java应用程序,这是客户需要的) 我现在正在更新一些初始代码。我正在改变的一件事是使用Spring的Java 使用JdbcTemplate的分页查询,java,spring,jdbctemplate,spring-jdbc,Java,Spring,Jdbctemplate,Spring Jdbc,我目前正在进行一个迁移项目,将数据从旧数据库迁移到新数据库(请不要问我为什么要使用Java应用程序,这是客户需要的) 我现在正在更新一些初始代码。我正在改变的一件事是使用Spring的JdbcTemplate,而不是原来的锅炉板代码 不幸的是,我还没有找到在jdbc模板上执行分页查询的方法,类似于旧代码: Statement statement = getConnection().createStatement( ResultSet.TYPE_FORWARD_ONLY, ResultSe
JdbcTemplate
,而不是原来的锅炉板代码
不幸的是,我还没有找到在jdbc模板上执行分页查询的方法,类似于旧代码:
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
对象(它不是SessionFactory
或框架实现的一部分)
然后我将在结果集上循环,一次映射一行。有人知道有没有一种简单的方法可以通过JdbcTemplate
实现相同的功能
你是说像这样的事吗
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
);
我认为这种应用的自然选择是(阅读令人印象深刻的文章)
以下是与您相关的部分:
特别是不完全是这样,这将返回并映射id大于666的所有记录。我需要一个解决方案,将返回一个记录的时间和地图。谢谢你的回复!请不要问我为什么要使用Java应用程序,这是客户需要的。这也是一个好主意。你能详细说明一下吗?基本上:我脑子里想的是春季批次。它所做的很多事情:块处理、事务管理、可重启性等等,仅仅使用SQL是不可能的。谢谢你的时间和帮助!它可以完成工作,还有更多,但它也非常复杂。目前我自己也在努力解决这个问题:-)
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")));
}
}
);