让你 Oracle 的存储过程与Java代码开始进行交互

Oracle 存储过程定义格式如下:
sql 代码
  1. CREATE OR REPLACE PROCEDURE PRO_YOUR_PROCEDURE (   
  2.     ELEMENT_01     IN      ELEMENT_TYPE,  --COMMENTS   
  3.      .......       ....        .....            ....   
  4.     ELEMENT_0S     OUT     ELEMENT_TYPE,  --COMMENTS   
  5.       ....         ...         ...           ....   
  6. )   
  7. AS  
  8.     ARGUMENT_01    ARGUMENT_TYPE(ARGUMENT_RANGE);   
  9.     ...................   
  10. BEGIN  
  11.     --AND YOUR CODE HERE !   
  12. END;   
  13. EXCEPTION   
  14. WHEN  
  15.     OTHERS   
  16. THEN  
  17.     RAISE_APPLICATION_ERROR(-20003,[YOUR EXCEPITON MESSAGE HERE !]);   
  18.     
  19. END;   
  20. COMMIT;--IF YOUR WANT , JUST DO SO !    
  21. END PRO_YOUR_PROCEDURE;  
其中,[ RAISE_APPLICATION_ERROR(-20003,[YOUR EXCEPITON MESSAGE HERE !]);]中的 “-20003”是 Oracle 提供的用于用户进行错误自定义的扩充代码。其值可以随便定义, 但是也有范围: -20000 到-20999的负整数。
注意到,在存储过程的参数定义中除了IN外,还有个OUT,IN类型的参数是很好理解的,其目的是为了让存储过程接收参数。那么OUT也就不难理解,他的职责就是提供存储过程执行过后的返回值并将其返回给调用者供其使用。
要用Java调用存储过程必须引用“import oracle.jdbc.OracleCallableStatement;”类。
Java调用存储过程的基本格式如下所示:
java 代码
  1. public RETURN_TYPE METHOD_NAME(ARGUMENTS,...)throws EXCEPTIONS...{   
  2.         conn=...;//建立数据库连接   
  3.         conn.setAutoCommit(false);//   
  4.         OracleCallableStatement cal = null;   
  5.         try{   
  6.                 cal = (OracleCallableStatement) conn.getMetaData().getConnection().prepareCall("call PRO_YOURS(?,...)");   
  7.                 //如果你的数据是一堆记录集那么你可能会用下面的方式   
  8.                 for(int i=0;i<...;i++){   
  9.                         cal.setString(1,arguments);   
  10.                         … …  … … … … … … … …   
  11.                         cal.registerOutParameter(n,Types.VARCHAR);   
  12.                         String messages=( (OracleCallableStatement) cal).getString(n);   
  13.                            
  14.                 }   
  15.         }catch(Exception e){   
  16.         try {   
  17.             conn.rollback();   
  18.         }catch(SQLException ex){}   
  19.         }catch(...){...............}finally{   
  20.                 … … … … … …   
  21.                 … … … … … …   
  22.         }   
  23. }  
其中,conn.getMetaData().getConnection().prepareCall("call PRO_YOURS(?,...)");是存储过程的Java调用声明。
cal.setString(1,arguments);是往存储过程中传入参数
(OracleCallableStatement) cal).getString(n)是从存储过程中得到执行后的返回值,但是,在此之前,你必须使用cal.registerOutParameter(n,Types.VARCHAR);进行声明
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值