我使用SimpleJdbcCall调用存储过程。
public Map<String, Object> callStoredProcedure(SimpleJdbcCall jdbcCall, String procedureName, Map<String, Object> inParamMap) {
log.info("Calling stored procedure with name : " + procedureName);
SqlParameterSource in = new MapSqlParameterSource(inParamMap);
Map<String, Object> out = jdbcCall.withProcedureName(procedureName).execute(in);
return out;
}
其结果输出为
Key =#result-set-1,Value = [{= 17.00}]
当我得到像这样的类类型值时,我感到很困惑。
Class class1 = entry.getValue()。getClass();
当我在数据库上执行时,我的sp返回17.00,但我在jdbcCall代码中得到 = 17.00 。
任何评论都会有所帮助。
答案 0 :(得分:1)
以下是我如何从之前的项目构建SimpleJdbcCall ....
createUpdateUsersSP = new SimpleJdbcCall(contactManagerJdbcT)
.withProcedureName(pb.getCreateUpdateUsersSp())
.declareParameters(
new SqlOutParameter("p_user_id", Types.NUMERIC),
new SqlOutParameter("p_update_stamp", Types.VARCHAR),
new SqlOutParameter("p_status", Types.VARCHAR),
new SqlOutParameter("p_failure_reason", Types.VARCHAR),
new SqlParameter("p_vonage_id", Types.VARCHAR),
new SqlParameter("p_mobile_did", Types.VARCHAR),
new SqlParameter("p_email_address", Types.VARCHAR),
new SqlParameter("p_name", Types.VARCHAR),
new SqlParameter("p_netname_id", Types.NUMERIC),
new SqlParameter("p_user_status", Types.VARCHAR),
new SqlParameter("p_image_update_stamp", Types.TIMESTAMP),
new SqlParameter("p_has_profile_image", Types.VARCHAR),
new SqlParameter("p_nick_name", Types.VARCHAR));
createUpdateUsersSP.setAccessCallParameterMetaData(false);
你有类似的东西可以告诉我们吗?
答案 1 :(得分:1)
显然,您的商店程序仅返回单个结果,但execute
JdbcCall
方法尝试返回输出参数的地图,按名称键入参数声明。由于您没有参数声明,因此只有ResultSet
只包含行,没有列名和单个值17.00
。
我认为您应该使用executeObject
将单个输出参数作为指定返回类型的对象返回。
String str = jdbcCall.withProcedureName(procedureName).executeObject(String.class, in);
或
double val = jdbcCall.withProcedureName(procedureName).executeObject(Double.class, in);
答案 2 :(得分:0)
这是我要提取值的工作,因为我看不到该问题的任何可行答案。
((Map)((List)out.get("#result-set-1")).get(0)).get("");
这给出了out参数中的值。
答案 3 :(得分:0)
这是我的工作。
Map<String,Object> simpleJdbcCallResult = simpleJdbcCall.execute(sqlParameterSource);
LinkedCaseInsensitiveMap<?> obj =
(LinkedCaseInsensitiveMap<?>)((List<?>)simpleJdbcCallResult.get("#result-set-1")).get(0);
Array[] values = (Array[]) obj.values().toArray()[0];