jdbcTemplate调用带输入输出参数的存储过程

public List> addPlanRuleProc(Map where) {
		StringBuffer sql = new StringBuffer();
		sql.append(" {call P_IMPORT_N3(V_BATCH_NO => :V_BATCH_NO,IO_CURSOR => :IO_CURSOR)} ");
		List> planList = jdbcTemplate.getJdbcOperations().execute(sql.toString(),
				new CallableStatementCallback>>() {


					@Override
					public List> doInCallableStatement(
							CallableStatement cs) throws SQLException,
							DataAccessException {
						List> resultsMap = new ArrayList<>();
						cs.setString("V_BATCH_NO", (String) where.get("V_BATCH_NO"));
						cs.registerOutParameter("IO_CURSOR", OracleTypes.CURSOR);// OracleTypes有两个包,调用的jdbc包
						cs.execute();
						ResultSet rs = (ResultSet) cs.getObject("IO_CURSOR");// 获取游标一行的值 注:这个位置的下标要和返回CURSOR的下标位置一致,否则报错


						while (rs.next()) {// 转换每行的返回值到Map中


							Map rowMap = new HashMap();


							rowMap.put("DLR_SIMPLE_NAME", rs.getString("DLR_SIMPLE_NAME"));
							rowMap.put("VEHICLE_BRAND_NAME", rs.getString("VEHICLE_BRAND_NAME"));


							resultsMap.add(rowMap);


						}
						rs.close();
						return resultsMap;
					}
		});
		return planList;
	}

你可能感兴趣的:(java基础)