我們通過Spring SimpleJdbcCall調用pl/sql存儲過程,JdbcTemplate上的fetchsize集被SimpleJdbcCall忽略。儘管我們已經將jdbctemplate的fetchsize設置爲200,但rowmapper結果集獲取大小仍設置爲10.任何想法爲什麼發生這種情況以及如何解決它?SimpleJdbcCall忽略JdbcTemplate獲取大小
在下面的代碼片段中,已經在行映射器中打印了結果集的fetchsize - 一旦它是200,其他時間是10,即使我在兩個occassion中使用相同的JdbcTemplate。
這直接執行通過的JdbcTemplate在行映射
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返回200 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);
在RowMapper類的mapRow方法中設置ResultSet的提取大小對我來說很有幫助。謝啦! – 2012-09-21 11:19:49