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<Fuck> getProcShowList() {
	Map map=jdbcCall.execute(new HashMap<String,Object>(0));
	System.out.println("size: "+map.size());
	return (List<Fuck>) map.get("fucks");
}


spring 部份代码的配置

<!--  配制数据源
<bean id="myDataResource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url"  value="jdbc:oracle:thin:@localhost:1521:ABC"/>
<property name="username" value="tenement"/>
<property name="password" value="rui"/>

<property name="initialSize" value="3"/>
<property name="maxActive" value="500"/>
<property name="maxIdle" value="3"/>
<property name="minIdle" value="1"/>
 
</bean>
-->

<!-- 配制数据池 -->
 <bean id="myDataResource" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName" value="java:comp/env/jdbc/SSHnewPool"/>
  </bean>



<!-- 配制原生sql查询方式    注入dataSource -->
<bean id="UserDao" class="accp.dao.imple.UserDaoImple">
        <property name="dataSource" ref="myDataResource"/>
    </bean>


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值