六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 59|回复: 0

java调用存储过程

[复制链接]

升级  70.33%

129

主题

129

主题

129

主题

举人

Rank: 3Rank: 3

积分
411
 楼主| 发表于 2013-1-13 18:51:30 | 显示全部楼层 |阅读模式
有两种方式:
1、通过输出参数返回一个字符串(可以由多个输出参数,这里我们只演示一个的情况)
DB2过程:(只是示例,不要直接去运行,我没有时间去调试存储过程)
CREATE PROCEDURE test1
(IN V_IARG1 VARCHAR(40),
IN V_IARG2 VARCHAR(20),
IN V_IARG3 VARCHAR(20),
OUT V_ORET VARCHAR(40)
)
SPECIFIC test1
LANGUAGE SQL
P1:BEGIN
SET v_oret = '1';
RETURN 0;
END P1
oracle类似上面,不再写了。
java方法:
<div style="padding-right: 5.4pt; padding-left: 5.4pt; background: #e6e6e6; padding-bottom: 4px; width: 95%; padding-top: 4px;">publicStringcallProc(StringprocName,String[][]params)...{
log.debug(
"procName:"+procName);
for(inti=0;params!=null&&i<params.length;i++)...{
if(params[1]==null||params[1].equals("")
||params[1].equals("null"))...{
params[
1]="%";
}

log.debug(params[
1]);
}

try...{
CallableStatementproc
=null;
Connectionconn
=null;
conn
=this.getSession().connection();
intindex=procName.indexOf("?");
procName
=procName.substring(0,index)+"?,"
+procName.substring(index);
proc
=conn.prepareCall(procName);
intparamsNum=params.length;
for(intk=0;k<paramsNum;k++)...{
if(params[k][0].equalsIgnoreCase("String"))...{
proc.setString(k
+1,params[k][1]);
}
elseif(params[k][0].equalsIgnoreCase("Long"))...{
proc.setLong(k
+1,Long.parseLong(params[k][1]));
}
elseif(params[k][0].equalsIgnoreCase("Integer"))...{
proc.setInt(k
+1,Integer.parseInt(params[k][1]));
}
elseif(params[k][0].equalsIgnoreCase("BigDecimal"))...{
proc.setBigDecimal(k
+1,newBigDecimal(params[k][1]));
}

}

proc.registerOutParameter(paramsNum
+1,Types.VARCHAR);
proc.execute();
returnproc.getString(paramsNum+1);
}
catch(Exceptione)...{
thrownewRuntimeException(e);
}

}
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表