哎!搞了半天,终于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>