java程序调用oracle存储过程

1、直接在java程序中用jdbc connection的方式调用:

 

private ResultSet callProcedure(Connection conn, String proName, List<Object> values) throws Exception {
		CallableStatement cstmt = null;
		ResultSet rs = null;
		try {
			StringBuffer function = new StringBuffer("{call "+proName+"(");
			
			if (values != null && values.size() > 0) {
				for (int i=0; i<values.size(); i++) {
					function.append("?,");
				}
			}
			function.append("?");
			
			function.append(")}");
			cstmt = conn.prepareCall(function.toString());
			
			for (int i=0; i<values.size(); i++) {
				cstmt.setObject(i+1, values.get(i));
			} 
			cstmt.registerOutParameter(values.size()+1, oracle.jdbc.driver.OracleTypes.CURSOR);
			cstmt.execute();
			rs = (ResultSet)cstmt.getObject(values.size()+1);
			return rs;
		}catch (Exception e) {
			e.printStackTrace();
			throw e;
		}finally {
			try {
				cstmt.close();
			}catch (Exception e) {
				e.printStackTrace();
				throw e;
			}
		}
		
	}

 

 

2、java程序用ibatis调用存储过程:

ibatis配置:

 

<resultMap id="corp-map" class="com.procedure.domain.IbatisProDomain">
    	<result property="dm" column="DM" /> 
    	<result property="mc" column="MC" /> 
    	<result property="bz" column="BZ" />
    	.....
	</resultMap>
	<parameterMap id="curMemuParameters" class="java.util.HashMap" > 	    
	    <parameter property="dm"  javaType="java.lang.String" mode="IN"/>	        
	    <parameter property="curMemuList" jdbcType="ORACLECURSOR" javaType="java.sql.ResultSet" mode="OUT" resultMap="corp-map" />
	</parameterMap>
	<procedure id="getProcedureExample" parameterMap="curMemuParameters"> 
	    {call P_EXAMPLE_PROCEDURE(?,?)} 
	</procedure>

 

 java程序:

 

List<IbatisProDomain> returnList = new ArrayList<IbatisProDomain>();
		Map<String,Object> parameterMap = new HashMap<String,Object>();   
		if(domain != null){			
			parameterMap.put("dm","01");
			parameterMap.put("curMemuList",null);
			sqlMapClientTemplate.queryForObjectByCurr("getProcedureExample","curMemuList",parameterMap); 
			returnList = (List<IbatisProDomain>)parameterMap.get("curMemuList");	
		}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值