Mysql 存储过程
本文包括一个 Mysql 存储过程的简单示例。
创建测试表
本文示例存储过程中使用到表 employee,创建表 employee SQL 如下:
create table employee(
emp_id int primary key not null,
first_name varchar(25),
last_name varchar(25),
dept varchar(10),
salary int
);
insert into employee values(1111, 'Kylin', 'Soong', 'BPM', 8000);
insert into employee values(1112, 'Kylin', 'Soong', 'BPM', 8000);
insert into employee values(1113, 'Kylin', 'Soong', 'BPM', 8000);
insert into employee values(1114, 'Kylin', 'Soong', 'BPM', 9000);
insert into employee values(1115, 'Kylin', 'Soong', 'BPM', 9000);
insert into employee values(1116, 'Kylin', 'Soong', 'BPM', 9000);
存储过程示例
如下为创建存储过程示例 SQL:
DELIMITER //
DROP PROCEDURE IF EXISTS employee_hos;
CREATE PROCEDURE employee_hos(
IN con CHAR(20),
OUT total INT)
BEGIN
SELECT emp_id, first_name, last_name FROM employee WHERE dept = con;
SELECT sum(salary) INTO total from employee WHERE dept = con;
END //
DELIMITER ;
使用如下 SQL 测试以上创建的存储过程:
call employee_hos('BPM', @total);
SELECT @total;
JDBC 调运存储过程
如下代码端通过JDBC 调运上面创建的存储过程:
Connection conn = JDBCUtil.getDriverConnection(JDBC_DRIVER, JDBC_URL, JDBC_USER, JDBC_PASS);
CallableStatement cStmt = conn.prepareCall("{call employee_hos(?, ?)}");
cStmt.setString(1, "BPM");
cStmt.registerOutParameter(2, Types.INTEGER);
boolean hadResults = cStmt.execute();
while (hadResults){
ResultSet rs = cStmt.getResultSet();
int columns = rs.getMetaData().getColumnCount();
for (int row = 1; rs.next(); row++) {
System.out.print(row + ": ");
for (int i = 0; i < columns; i++) {
if (i > 0) {
System.out.print(", ");
}
System.out.print(rs.getString(i + 1));
}
System.out.println();
}
rs.close();
hadResults = cStmt.getMoreResults();
}
int outputValue = cStmt.getInt(2);
System.out.println(outputValue);
JDBCUtil.close(cStmt);
JDBCUtil.close(conn);