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包