完整示範 MySQL 儲存程序建立與 JDBC CallableStatement 調用流程,包含輸入參數設定、輸出參數註冊、執行更新並取回自動遞增 ID。
CREATE TABLE user (
id INT(11) NOT NULL AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
pswd VARCHAR(50) DEFAULT NULL,
pic LONGBLOB,
remark LONGTEXT,
PRIMARY KEY (id)
);
DELIMITER $
DROP PROCEDURE IF EXISTS testprocedure $
CREATE DEFINER=`vcom`@`%` PROCEDURE testprocedure(
IN in_name VARCHAR(20),
IN in_pswd VARCHAR(20),
OUT out_id BIGINT
)
BEGIN
INSERT INTO user(name, pswd) VALUES(in_name, in_pswd);
SELECT LAST_INSERT_ID() INTO out_id;
END $
DELIMITER ;
public static void testExeProcedure() {
Connection conn = DBToolkit.getConnection();
String sql = "{call testprocedure (?,?,?)}";
try {
CallableStatement cstmt = conn.prepareCall(sql);
cstmt.setString(1, "wangwu");
cstmt.setString(2, "111111");
cstmt.registerOutParameter(3, Types.BIGINT); // 註冊 OUT 參數
cstmt.executeUpdate();
Long id = cstmt.getLong(3); // 或 cstmt.getLong("out_id")
System.out.println("本次插入資料的 id=" + id);
} catch (SQLException e) {
e.printStackTrace();
} finally {
DBToolkit.closeConnection(conn);
}
}
本次插入資料的 id=1
Process finished with exit code 0
MySQL 儲存程序寫法參考:https://www.blogjava.net/sxyx2008/archive/2009/11/24/303497.html