MySQL数据库存储过程

什么是存储过程? —— 存储过程(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  -- 存储过程结束
&&  -- 遇到&&符号表示结束
DELIMITER  ; -- 恢复原来的初始状态,分号前需要有空格

2、调用存储过程
CALL usp_add(' 一年级', '二年级',@o_result); -- 传入2个参数,输出一个结果

 3、查询存储过程返回的结果
SELECT @o_result;

第二步:在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(?,?,?)} ";  
        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;
}
 

猜你喜欢

转载自blog.csdn.net/qq15577969/article/details/80199421