您的位置:首页 > 数据库 > Oracle

在SSH中通过spring的jdbctemplate接口调用oracle数据库的函数与存储过程

2014-03-31 10:49 716 查看
曾经有段时间,因为要获取oracle存储过程或者函数中的多个返回值,但不知得在java代码中如何实现,因没有时间研究,就将结果通过编写sql函数,并将结果值串通过分隔符在一起来取值,通过select 函数名 from dual这样的模式来执行函数,虽然也能实现所要的结果,但总觉得有些怪异,故空闲下来后就上网搜索下,果然有比较好用的方法,便修改下本身的调用代码,执行成功后顺便分享下。

一、执行存储过程,

存储过程名P_SYNCH_EMPLOYBUSI,

参数有pa1,in;pa2,out;

String stmt_sql = "{call "+P_SYNCH_EMPLOYBUSI+"(?,?)}";
String str_result ="";
final String pa1 = para1;
final String pa2 = "test";
Map resultMap= (Map)this.getJdbcTemplate().execute(stmt_sql, new CallableStatementCallback(){
public Object doInCallableStatement(CallableStatement cs)throws SQLException,DataAccessException{
cs.setString(1, pa1);
//cs.setString(2, pa2);
cs.registerOutParameter(2, Types.VARCHAR);
cs.execute();
Map map = new HashMap();
map.put("result", cs.getString(2));
return map;
}
});

该调用方法中涉及到了回调方法 CallableStatementCallback与CallableStatement 接口实现,如果不求甚解的话可以照搬,不过作为一名程序员,还是要理解个透最好。

调用函数方法也是差不多,就是将函数名修改即可,以下是函数的调用方法,有返回值哦^^

String stmt_sql = "{? =call  F_BUSIPOITCALCULATE(?)}";
String str_result ="";
final String pa1 = temploybusi.getId().toString();
final String pa2 = "test";
Map resultMap= (Map)this.getJdbcTemplate().execute(stmt_sql, new CallableStatementCallback(){
public Object doInCallableStatement(CallableStatement cs)throws SQLException,DataAccessException{
cs.registerOutParameter(1, Types.NUMERIC);
cs.setInt(2, Integer.parseInt(pa1));
cs.execute();
Map map = new HashMap();
map.put("result", cs.getString(1));//获取返回值
return map;
}
});
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: