JAVA程序调用MYSQL带有OUTPUT参数的存储过程

来源:互联网 发布:centos debian 比较 编辑:程序博客网 时间:2024/06/06 10:53

JAVA程序调用MYSQL带有OUTPUT参数的存储过程实现思路

(1) 给存储过程参数列表中定义带OUTPUT 输出参数 ,关键字(参数名称 ,数据类型,OUTPUT)
   例如 :
   ps_isa_ywxx_insert(IN ps_ywbh VARCHAR(10)  CHARACTER SET UTF8, IN ps_ywmc VARCHAR(20) CHARACTER SET UTF8, IN ps_ywbz VARCHAR(30) CHARACTER SET UTF8, OUT exceResult INT) ;
(2)在存储过程中给OUTPUT参数赋值,包含两部分内容,一部分是给参数赋默认值(出现异常要返回的值),另一部分是给参数赋存储过程正常执行完毕时要返回的值 
 例如:
   SET exceResult =0;  ----默认值
   ------其他数据库操作-----------
  INSERT INTO isa_ywxx (ywbh, ywmc, ywbz) VALUES (ps_ywbh, ps_ywmc, ps_ywbz);
  COMMIT;
  SET exceResult = 1; --- 存储过程正常执行完毕时要返回的值
(3)JAVA程序调用存储过程使用对象:
需要使用  CallableStatement 对象去执行存储过程,而不是 PreparedStatement,执行存储过程语句必须写在注册OUTPUT参数之后

执行存储过程方法:
  CS.execute() ;
(4)存储过程参数列表中的参数应该使用 “?”占位符方式编写,并使用CS (CallableStatement类型对象)的setXXX方法来给参数赋值,遇到OUTPUT参数时应该使用 CS的registerOutParameter方法来注册OUTPUT返回值参数,registerOutParameter有两个参数(参数索引位置和参数类型,参数类型 java.sql.Types中某一类型)
例如 :
CS.registerOutParameter(4, Types.INTEGER) ;
  
(5)接收存储过程OUTPUT参数值(返回值),接收OUTPUT参数值使用CS的getXXX方法
例如:
    ps.getInt(4);
(6) 根据接收到的OUTPUT参数值,做判断执行其他操作

实现源码 :

MYSQL 存储过程 代码

 

[sql] view plaincopy
  1. CREATE PROCEDURE ps_isa_ywxx_insert(IN ps_ywbh VARCHAR(10)  CHARACTER SET UTF8, IN ps_ywmc VARCHAR(20) CHARACTER SET UTF8, IN ps_ywbz VARCHAR(30) CHARACTER SET UTF8, OUT exceResult INT)  
  2.   COMMENT '新增新业务记录对象'  
  3. BEGIN  
  4.   DECLARE EXIT HANDLER FOR SQLEXCEPTION ROLLBACK;  
  5.   SET exceResult =0;  
  6.   START TRANSACTION;  
  7.   INSERT INTO isa_ywxx (ywbh, ywmc, ywbz) VALUES (ps_ywbh, ps_ywmc, ps_ywbz);  
  8.   COMMIT;  
  9.   SET exceResult = 1;  
  10. END  

 

JAVA 程序代码 :

[java] view plaincopy
  1. public boolean createBussinKinds(String ywbh, String ywmc, String ywbz) {  
  2.     Connection con = null;  
  3.     CallableStatement  ps = null;  
  4.     int insertResult = 0;  
  5.     try {  
  6.         con = JdbcUtil.getInstance().getConnection();  
  7.         con.setAutoCommit(false);  
  8.         ps = con.prepareCall(" call ps_isa_ywxx_insert(?,?,?,?) ; ");  
  9.         ps.setString(1, ywbh);  
  10.         ps.setString(2, ywmc);  
  11.         ps.setString(3, ywbz);  
  12.         ps.registerOutParameter(4, Types.INTEGER) ;  
  13.         ps.execute() ;  
  14.         insertResult = ps.getInt(4);  
  15.         System.out.println("BBBBBBBBBBBBBBBBBBBB"+insertResult);  
  16.         if (insertResult > 0) {  
  17.             log.info("执行添加操作 操作数据库成功!");  
  18.             return true;  
  19.         }  
  20.   
  21.     } catch (SQLException e) {  
  22.       log.error(e.getMessage());  
  23.     } finally {  
  24.         JdbcUtil.close(null, ps, con);  
  25.     }  
  26.     return false;  
  27. }  


备注:JdbcUtil 连接MYSQL数据公共类 其中 PreparedStatement 和 CallableStatement ,Types 均来至于java.sql包

0 0
原创粉丝点击