0
回到我使用SimpleJdbcCall执行存储过程如下:春:存储过程输出参数在错误的顺序
public static List<Object> callSp(JdbcTemplate jdbcTemplate, String storedProcedureName, Object... inParameters) {
try {
final SimpleJdbcCall jdbcCall = new SimpleJdbcCall(jdbcTemplate).withProcedureName(storedProcedureName);
return newArrayList(jdbcCall.execute(inParameters).values());
} catch (DataAccessException e) {
throw new RuntimeException(e.getMessage(), e);
}
}
一切工作的魅力,但我面临以下问题:在存储过程中的输出参数返回错误的顺序。所以,如果你没有关于输出的信息 - 你无法正确处理它。正如我发现的,这是因为在JdbcTemplate#extractOutputParameters中使用HashMap来收集输出(而不是LinkedHashMap,其中条目的顺序与插入顺序相同)。
我知道我可以明确定义输出,但是我没有这样的信息,这个方法应该可以和任何传入的存储过程一起工作。另外,我知道有可能使用StoredProcedure,但是会有相同的问题,因为它使用相同的JdbcTemplate方法。
目前,作为临时解决方案,我从数据库元数据和映射返回的值中检索有关输出(名称和序号位置)的信息。
有没有人遇到过这个问题,您的解决方案是什么?
林:
输出参数可以注册这样。据我所知,命名参数只用于输入参数。我错了吗? –
我已经应用了我们用于输出参数的codesample。 – tillias
在您的解决方案中,我仍然需要知道输出参数的名称 –