spring jdbc 调用存储过程封装

</pre><h1>1、调用存储过程--返回list以及无结果返回以及只返回一个参数</h1><pre code_snippet_id="671267" snippet_file_name="blog_20150520_2_9698049" name="code" class="java">
/**
		 *  获取数据库内的存储过程--返回一个List
		 * @param procedureName 存储过程名
		 * @param inParameter   输入的参数 
		 * @param outParamter   输出的参数
		 * @return
		 */
		public List<Map> callProcedure(final String procedureName,final List inParameter,final List outParamter){
			if(procedureName==null || procedureName.length() == 0 ){
				return null;
			}
			//没有返回参数
			if(outParamter == null ){
				if(callProcedureWithoutOut(procedureName,inParameter))return null;
			}
			 List resultList = (List) DBUtility.getJdbcTemplate().execute(  
				     new CallableStatementCreator() {
						public CallableStatement createCallableStatement(Connection con) throws SQLException {
							int inSize = inParameter==null?0:inParameter.size();
							int outSize = outParamter==null?0:outParamter.size();
							StringBuffer sbsql = new StringBuffer();
							sbsql.append("{call "+procedureName).append("(");
							for(int i=0;i<(inSize+outSize);i++){
								if(i == 0){
									sbsql.append("?");
								}else{
									sbsql.append(",?");
								}
							}
							sbsql.append(")}");
					         CallableStatement cs = con.prepareCall(sbsql.toString());
					         // 设置输入参数的值
					         if(inSize > 0 ){
					        	String typeName =  null;
					        	for(int i=0;i<inSize;i++){ 
					        		typeName = inParameter.get(i).getClass().getName().toString();
					        		cs.setObject(i+1, inParameter.get(i));
					        	}
					         }
					         // 注册输出参数的类型 
					           cs.registerOutParameter(inSize+1, OracleTypes.CURSOR);  
					           return cs;   
						}
					}, new CallableStatementCallback<List>() {
						public List<Map> doInCallableStatement(CallableStatement cs) throws SQLException,DataAccessException {   
							   int inSize = inParameter==null?0:inParameter.size();
					           List<Map> resultsMap = new ArrayList();   
					           cs.execute();   
					           ResultSet rs = (ResultSet) cs.getObject(inSize+1);// 获取游标一行的值   
					           while (rs.next()) {// 转换每行的返回值到Map中   
					              Map rowMap = new HashMap();  
					              for(int i=0;i<outParamter.size();i++){
					            	  String outP = outParamter.get(i).toString();
					            	  rowMap.put(outP.toLowerCase(),rs.getObject(outP.toUpperCase()) );
					              }
					              resultsMap.add(rowMap);   
					           }   
					           rs.close();   
					           return resultsMap;   
					        }   
						
					}); 
			 return resultList;
		
		}
		/**
		 *  获取数据库内的存储过程--没有输出
		 * @param procedureName 存储过程名
		 * @param inParameter 输出的参数
		 */
		public Boolean callProcedureWithoutOut(final String procedureName,final List inParameter){
			if(procedureName==null || procedureName.length() == 0 ){
				return false;
			}
			StringBuffer sbsql = new StringBuffer();
			sbsql.append("{call "+procedureName).append("(");
			for(int i=0;i<inParameter.size();i++){
				if(i == 0){
					sbsql.append(inParameter.get(i));
				}else{
					sbsql.append(","+inParameter.get(i));
				}
			}
			sbsql.append(")}");
			DBUtility.getJdbcTemplate().execute(sbsql.toString());
			return true;
		}
		/**
		 *  获取数据库内的存储过程--输出只有一个参数
		 * @param procedureName
		 * @param inParameter
		 * @param outParamer
		 * @return
		 */
		public String callProcedureOnlyoneOut(final String procedureName,final List inParameter,final String outParamer){
			if(procedureName==null || procedureName.length() == 0 ){
				return null;
			}
			 String result = (String) DBUtility.getJdbcTemplate().execute(   
				     new CallableStatementCreator() {
						public CallableStatement createCallableStatement(Connection con) throws SQLException {
							int inSize = inParameter==null?0:inParameter.size();
							StringBuffer sbsql = new StringBuffer();
							sbsql.append("{call "+procedureName).append("(");
							for(int i=0;i<(inSize+1);i++){
								if(i == 0){
									sbsql.append("?");
								}else{
									sbsql.append(",?");
								}
							}
							sbsql.append(")}");
					         CallableStatement cs = con.prepareCall(sbsql.toString());
					         // 设置输入参数的值
					         if(inSize > 0 ){
					        	String typeName =  null;
					        	for(int i=0;i<inSize;i++){ 
					        		typeName = inParameter.get(i).getClass().getName().toString();
					        		cs.setObject(i+1, inParameter.get(i));
					        	}
					         }
					         // 注册输出参数的类型 
					           cs.registerOutParameter(inSize+1, OracleTypes.CURSOR);  
					           return cs;   
						}
					}, new CallableStatementCallback<Object>() {
						public Object doInCallableStatement(CallableStatement cs) throws SQLException,DataAccessException {   
							   int inSize = inParameter==null?0:inParameter.size();
					           List<Map> resultsMap = new ArrayList();   
					           cs.execute();   
					           return  cs.getObject(inSize+1);// 获取游标一行的值   
					        }   
						
					}); 
			 return result;
		}	
	

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值