JAVA程序調用MYSQL帶有OUTPUT參數的存儲過程


 

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包

發佈了38 篇原創文章 · 獲贊 10 · 訪問量 43萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章