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

本文介绍如何使用JAVA程序调用MYSQL存储过程并处理带有OUTPUT参数的情况,包括存储过程定义、异常处理、JAVA代码实现等关键步骤。


 

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 存储过程 代码

 

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)
  COMMENT '新增新业务记录对象'
BEGIN
  DECLARE EXIT HANDLER FOR SQLEXCEPTION ROLLBACK;
  SET exceResult =0;
  START TRANSACTION;
  INSERT INTO isa_ywxx (ywbh, ywmc, ywbz) VALUES (ps_ywbh, ps_ywmc, ps_ywbz);
  COMMIT;
  SET exceResult = 1;
END

 

JAVA 程序代码 :

	public boolean createBussinKinds(String ywbh, String ywmc, String ywbz) {
		Connection con = null;
		CallableStatement  ps = null;
		int insertResult = 0;
		try {
			con = JdbcUtil.getInstance().getConnection();
			con.setAutoCommit(false);
			ps = con.prepareCall(" call ps_isa_ywxx_insert(?,?,?,?) ; ");
			ps.setString(1, ywbh);
			ps.setString(2, ywmc);
			ps.setString(3, ywbz);
		    ps.registerOutParameter(4, Types.INTEGER) ;
		    ps.execute() ;
			insertResult = ps.getInt(4);
			System.out.println("BBBBBBBBBBBBBBBBBBBB"+insertResult);
			if (insertResult > 0) {
				log.info("执行添加操作 操作数据库成功!");
				return true;
			}

		} catch (SQLException e) {
		  log.error(e.getMessage());
		} finally {
			JdbcUtil.close(null, ps, con);
		}
		return false;
	}


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

评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值