【发布时间】:2011-01-25 07:44:55
【问题描述】:
我们通过 Spring SimpleJdbcCall 调用 pl/sql 存储过程,在 JdbcTemplate 上设置的 fetchsize 被 SimpleJdbcCall 忽略。尽管我们已将 jdbctemplate fetchsize 设置为 200,但 rowmapper 结果集获取大小设置为 10。知道为什么会发生这种情况以及如何解决它吗?
已经在下面的代码 sn-p 中的 rowmapper 中打印了结果集的 fetchsize - 一旦它是 200,其他时候它是 10,即使我在这两种情况下都使用相同的 JdbcTemplate。
这种通过 jdbctemplate 直接执行在行映射器中返回 fetchsize 200
jdbcTemplate = new JdbcTemplate(ds);
jdbcTemplate.setResultsMapCaseInsensitive(true);
jdbcTemplate.setFetchSize(200);
List temp = jdbcTemplate.query("select 1 from dual", new ParameterizedRowMapper() {
public Object mapRow(ResultSet resultSet, int i) throws SQLException {
System.out.println("Direct template : " + resultSet.getFetchSize());
return new String(resultSet.getString(1));
}
});
通过 SimpleJdbcCall 执行的这个执行总是在 rowmapper 中返回 10 的 fetchsize
jdbcCall = new SimpleJdbcCall(jdbcTemplate).withSchemaName(schemaName)
.withCatalogName(catalogName).withProcedureName(functionName);
jdbcCall.returningResultSet((String) outItValues.next(), new ParameterizedRowMapper<Map<String, Object>>() {
public Map<String, Object> mapRow(ResultSet rs, int row) throws SQLException {
System.out.println("Through simplejdbccall " + rs.getFetchSize());
return extractRS(rs, row);
}
});
outputList = (List<Map<String, Object>>) jdbcCall.executeObject(List.class, inParam);
【问题讨论】:
标签: java database spring stored-procedures jdbc