我有以下弹簧启动代码调用存储过程。
SimpleJdbcCall dbCall = new SimpleJdbcCall(jdbcTemplate)
.withSchemaName("MySchema")
.withProcedureName("spName")
.declareParameters(
new SqlParameter("param1", Types.INTEGER),
new SqlParameter("param2", Types.TINYINT),
new SqlParameter("param3", Types.INTEGER))
.returningResultSet("some_return_value", (RowMapper<Integer>) (rs, rowNum) -> {
int id = rs.getInt("columnName");
System.out.println(id);
return id;
});
MapSqlParameterSource params = new MapSqlParameterSource();
params.addValue("param1", 12345);
params.addValue("param2", 2);
params.addValue("param3", 12345);
List res = dbCall.executeFunction(List.class, params);
出于测试目的,我尝试获取ID列表。我稍后会添加的其他参数。结果,res
变量始终为null
。
System.out.println(id);
中的RowMapper
在控制台窗口中显示正确的ID。
有人可以解释一下我的代码中有什么问题吗?
更新15/11/2017
我发现如果我将List res = dbCall.executeFunction(List.class, params);
更改为Map<String,Object> response = getQACall.execute(params);
则可行。任何想法,为什么它不适用于executeFunction
?