六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 86|回复: 0

java调用存储过程

[复制链接]

升级  38.7%

580

主题

580

主题

580

主题

探花

Rank: 6Rank: 6

积分
1774
 楼主| 发表于 2013-1-13 18:58:24 | 显示全部楼层 |阅读模式
 
有两种方式:
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;">    public String callProc(String procName, String[][] params) ...{
        log.debug(
"procName:" + procName);
        
for (int i = 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 ...{
            CallableStatement proc 
= null;
            Connection conn 
= null;
            conn 
= this.getSession().connection();
            
int index = procName.indexOf("?");
            procName 
= procName.substring(0, index) + "?,"
                    
+ procName.substring(index);
            proc 
= conn.prepareCall(procName);
            
int paramsNum = params.length;
            
for (int k = 0; k < paramsNum; k++...{
                
if (params[k][0].equalsIgnoreCase("String")) ...{
                    proc.setString(k 
+ 1, params[k][1]);
                }
 else if (params[k][0].equalsIgnoreCase("Long")) ...{
                    proc.setLong(k 
+ 1, Long.parseLong(params[k][1]));
                }
 else if (params[k][0].equalsIgnoreCase("Integer")) ...{
                    proc.setInt(k 
+ 1, Integer.parseInt(params[k][1]));
                }
 else if (params[k][0].equalsIgnoreCase("BigDecimal")) ...{
                    proc.setBigDecimal(k 
+ 1new BigDecimal(params[k][1]));
                }

            }

            proc.registerOutParameter(paramsNum 
+ 1, Types.VARCHAR);
            proc.execute();
            
return proc.getString(paramsNum + 1);
        }
 catch (Exception e) ...{
            
throw new RuntimeException(e);
        }

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

本版积分规则

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