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

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


					@Override
					public List<Map<String, Object>> doInCallableStatement(
							CallableStatement cs) throws SQLException,
							DataAccessException {
						List<Map<String, Object>> 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<String, Object> rowMap = new HashMap<String, Object>();


							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;
	}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
使用JdbcTemplate调用Oracle存储过程可以按照以下步骤进行: 1. 创建一个JdbcTemplate对象,它是Spring框架提供的用于简化JDBC操作的工具类。你需要配置数据库连接信息,比如数据库驱动、URL、用户名和密码等。 2. 定义存储过程调用语句,可以使用CallableStatementCreator接口的实现类来创建CallableStatement对象。在创建CallableStatement时,需要设置存储过程的名称和参数。 3. 执行存储过程调用,可以使用JdbcTemplate的execute方法来执行存储过程调用语句,传入上一步创建的CallableStatementCreator对象。 下面是一个示例代码,演示了如何使用JdbcTemplate调用Oracle存储过程: ```java import org.springframework.jdbc.core.CallableStatementCreator; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.SqlParameter; import org.springframework.jdbc.core.SqlTypeValue; import org.springframework.jdbc.core.SqlOutParameter; import org.springframework.jdbc.core.SqlParameter; import org.springframework.jdbc.object.StoredProcedure; import java.sql.CallableStatement; import java.sql.Connection; import java.sql.SQLException; import java.sql.Types; import java.util.Map; public class OracleStoredProcedureExample { private JdbcTemplate jdbcTemplate; public void setJdbcTemplate(JdbcTemplate jdbcTemplate) { this.jdbcTemplate = jdbcTemplate; } public void callStoredProcedure() { String procedureName = "YOUR_PROCEDURE_NAME"; SqlParameter[] parameters = { new SqlParameter("IN_PARAM1", Types.INTEGER), new SqlParameter("OUT_PARAM1", Types.VARCHAR) }; Map<String, Object> result = jdbcTemplate.execute( new CallableStatementCreator() { @Override public CallableStatement createCallableStatement(Connection con) throws SQLException { CallableStatement cs = con.prepareCall("{call " + procedureName + "(?, ?)}"); cs.setInt(1, 123); // 设置输入参数的值 cs.registerOutParameter(2, Types.VARCHAR); // 注册输出参数的类型 return cs; } }, new CallableStatementCallback<Map<String, Object>>() { @Override public Map<String, Object> doInCallableStatement(CallableStatement cs) throws SQLException { cs.execute(); String outputValue = cs.getString(2); // 获取输出参数的值 // 可以根据需要将输出参数的值封装到Map中返回 // 比如:Map<String, Object> result = new HashMap<>(); // result.put("OUTPUT_PARAM1", outputValue); // return result; return null; } } ); // 输出存储过程的执行结果 System.out.println(result); } } ``` 在上面的示例代码中,你需要替换`YOUR_PROCEDURE_NAME`为你要调用存储过程的名称。然后,根据存储过程的定义,设置输入参数的值和输出参数的类型。通过`jdbcTemplate.execute`方法执行存储过程调用,并通过`CallableStatementCallback`回调接口处理存储过程的执行结果。 希望对你有所帮助!如果还有其他问题,请继续提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

翅膀君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值