【发布时间】:2021-12-30 00:58:51
【问题描述】:
我这样调用我的存储过程:
SimpleJdbcCall jdbcCall = new SimpleJdbcCall(jdbcTemplate)
.returningResultSet("LookupResponse", new LookupMapper())
.withProcedureName(lookupProcedureName);
并传递一些参数:
SqlParameterSource in = new MapSqlParameterSource()
.addValue("id", request.getId())
.addValue("Username", userName)
行映射器的代码:
public class LookupMapper implements RowMapper<LookupResponse> {
@Override
public LookupResponse mapRow(ResultSet rs, int i) throws SQLException {
LookupResponse lookupResponse = new LookupResponse();
lookupResponse.setDeviceId(rs.getInt("DeviceId"));
lookupResponse.setApplicationId(rs.getInt("AppId"));
return lookupResponse;
}
}
然后我调用数据库:
Map<String, Object> out = jdbcCall.execute(in);
我在返回的映射中看到未映射的键值对,当我这样做时:
(Collection<LookupResponse>) out.get("LookupResponse");
它返回空值。
我的行映射响应没有键。 相同类型的代码适用于另一个存储过程......我不明白可能是什么原因。控制台中没有异常,rowMapper 只是被忽略了。请帮我理解。
【问题讨论】:
-
LookupMapper的代码在哪里? -
@JimGarrison 已添加,请查看
-
在 mapRow 中放一个断点,看看发生了什么。
-
@tgdavies 什么都没有发生,它没有进入那个方法
-
那么您的存储过程可能没有返回任何行,或者
"LookupResponse"与结果/光标的名称不匹配。
标签: java spring spring-jdbc jdbctemplate