什么是存储过程?
——
存储过程(Stored Procedure)是在大型
数据库系统
中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。
存储过程相当于一个整体,一句话,一次调用就可以同时执行多条SQL语句。
第一步:通过编写SQL命令语句来创建
存储过程:
1、创建存储过程
DROP PROCEDURE IF EXISTS usp_add;
--
usp_add是定义的一个存储过程名称
DELIMITER &&
--
mysql存储过程遇到分号,就自动结束。这里我们
声明由符号&&表示开始和结束,遇到分号则不会再结束。
CREATE PROCEDURE usp_add(IN v_n1
VARCHAR(20),IN v_n2
VARCHAR(20),OUT o_result
INT)
-- 参数设置:in表示输入参数,out表示输出参数
BEGIN
-- 存储过程开始
DECLARE t_error INTEGER DEFAULT 0;
# 设置错误号变量 初始值为0
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET t_error = 1;
# 如果出现任何错误(不是 NOT FOUND ) , 设置 t_error 为 1 ,然后继续往下执行
START TRANSACTION;
# 定义事务开始
INSERT INTO
grade VALUES(NULL,v_n1);
--
grade是表名
INSERT INTO
grade
VALUES(NULL,v_n2);
# 判断事务是执行提交还是回滚
IF t_error = 1 THEN
SET o_result=0;
ROLLBACK;
# 回滚
ELSE
SET o_result=1;
COMMIT;
# 提交
END IF;
END IF;
END
-- 存储过程结束
&&
-- 遇到&&符号表示结束
DELIMITER ;
-- 恢复原来的初始状态,分号前需要有空格
2、调用存储过程
CALL usp_add('
一年级',
'二年级',@o_result);
-- 传入2个参数,输出一个结果
3、查询存储过程返回的结果
SELECT @o_result;
第二步:在Java类中调用写好的存储过程:
第二步:在Java类中调用写好的存储过程:
import java.sql.CallableStatement;
import java.sql.Connection;
public boolean addGrade(
String n1,
String n2
) {
Connection conn=null;
boolean flag=false;
try {
conn=getConn();
//连接数据库
//创建调用存储过程对象
String sql=" {call usp_add(?,?,?)} ";
String sql=" {call usp_add(?,?,?)} ";
CallableStatement c=conn.prepareCall(
sql);
c.set
String(1,
n1);
c.
set
String(2,
n2);
c.registerOutParameter(3, java.sql.Types.INTEGER);
//接收返回值
c.execute();
String result=c.getInt(3);
if(
result==1){
//返回的结果为1时,表示插入数据成功。
flag=true;
}else{
flag=false;
}
} catch (Exception e) {
e.printStackTrace();
}finally{
closeAll(conn, null,null);
//关闭数据库
}
return flag;
}