spring SimpleJdbcCall 调用存储过程 通过游标提取数据!

哎!搞了半天,终于OK了!有时Api也挺坑人的,明明就一样,但就报错,木有办法,只有自已解决--------------

Oracle存储过程代码:

--存储过程 包头
create or replace package myPack is
type c_cursors is ref cursor;
procedure deUser(v_id long);--删除
procedure getAllUser(myCursor out myPack.c_cursors);--查询
end myPack;

--存储过程 包体
create or replace package body myPack as
 /****************删除*******************/
procedure deUser(v_id long) is
  e_table exception;
  v_sql varchar2(200); 
  begin
  if v_id is null then
    raise e_table;
    end if;
    v_sql:='delete  from fuck where id=:1';
     execute immediate v_sql using v_id;
    exception 
      when e_table then
        dbms_output.put_line('参数不能为空!');
    end;
 /****************查询*******************/
 procedure getAllUser(myCursor out myPack.c_cursors) as
  v_sqlS varchar2(200);
  begin    
    v_sqlS:='select * from fuck';        
    open myCursor for v_sqlS;
  end;
end myPack;

DaoImple实现类代码,其它调用呀,Action呀就不用贴出来了吧,太多,重点就这个了!

public class UserDaoImple /*extends HibernateDaoSupport*/ implements UserDao {

	
	/**
	 * sql 原生sql支持
	 * 
	 */
	private JdbcTemplate jdbcTemplate;
	private SimpleJdbcTemplate simpleJdbcTemplate;
	private DataSource dataSource;
	private SimpleJdbcCall jdbcCall;
	
	
	//通过注入得得到DataSoruce再交组jdbcTemplate构造器
	@SuppressWarnings("deprecation")
	public void setDataSource(DataSource dataSource) {
		this.jdbcTemplate = new JdbcTemplate(dataSource);//jdbcTemplate 方式查询
		
		this.dataSource= dataSource;//mappingSqlQuery方式
		
		//使用Simple 方式 更好
		this.simpleJdbcTemplate=new SimpleJdbcTemplate(dataSource);
		jdbcTemplate.setResultsMapCaseInsensitive(true);
		//创建simplejdbccall
		this.jdbcCall=new SimpleJdbcCall(this.jdbcTemplate)
		              .withProcedureName("myPack.getAllUser")
		              .withoutProcedureColumnMetaDataAccess()
		              .returningResultSet("fucks",
		            		  ParameterizedBeanPropertyRowMapper
		            		  .newInstance(Fuck.class));
	}

//-------------此处省略其它代码-------------------

/**
 * 存储过程删除用户
 */
public void deleteF(Fuck u) {
	jdbcTemplate.update("call mypack.deuser(?)",
			new Object[]{Long.valueOf(u.getId())});	
	
}

public Fuck getProcedure() {
	
	return null;
}
//------------存储过程  游标 获取全部用户---------------------------------
public List getProcShowList() {
	Map map=jdbcCall.execute(new HashMap(0));
	System.out.println("size: "+map.size());
	return (List) map.get("fucks");
}


spring 部份代码的配置




 
    
  





        
    


你可能感兴趣的:(spring SimpleJdbcCall 调用存储过程 通过游标提取数据!)