MySql的储存过程

5 篇文章 0 订阅
3 篇文章 0 订阅

        可以执行多行sql语句的集合,叫做存储过程

储存过程(Stored Procedure)是在大型数据库中,一组为了完成特定功能的sql语句集,储存在数据库中,经过一次编译后就不需要在编译了,用户通过指定储存过程的名字并给出参数(如果该储存过程带有参数)来执行他,存储过程是数据库中一个重要的对象

基本使用

创建储存过程

-- 创建存储过程
create procedure myproc1()
begin
    -- 写入sql语句
    insert into tb_user values (null,'小王','123',now());
    -- 查询插入的id号
    select last_insert_id() from tb_user;
end;

调用储存过程

-- 调用produce
call myproc1();

查看当前数据库中储存过程

show procedure status where Db='db001';

查看储存过程的相信内容

show create procedure myproc1;

变量的使用

        在储存过程中声明一个局部变量

                通过DECLARE声明局部变量

    DECLARE _id int; -- 声明一个变量
    DECLARE name varchar(50); -- 声明字符串变量

通过set进行赋值

 set _id = _id +1;

也可以通过select...into赋值

select max(uid) from tb_user into _id;

储存参数变量

        输入参数使用in进行定义

        输出参数使用out进行定义

        输入输出参数使用inout进行定义

create procedure register(in myname varchar(50),in pwd varchar(50),out myid int)
begin
    -- 查询最大值
    select max(uid) from tb_user into myid;
    -- uid自增
    set myid=myid+1;
    -- 插入数据
    insert into tb_user values (myid,myname,pwd,now());
end;

-- 调用带参数的存储过程
call register('小红花话','456',@newId);
select @newId;

存储过程的语法

        if的基本使用

create procedure testif(in age int)
BEGIN
    if age>18 then
        select '可以去网吧';
    elseif age=18 then
        select '刚好18岁,你看着办';
    else
        select '不可以去网吧';
    end if;
END;
-- 调用存储过程
call testif(21);

完整的注册功能

create procedure register(in myname varchar(50),in pwd varchar(50),out myid int)
begin
    declare cnt int;
    -- 查找数量
    select count(*) from tb_user into cnt;

    if cnt >0
        then
            -- 查询最大值
            select max(uid) from tb_user into myid;
            -- uid自增
            set myid=myid+1;
    else
        set myid=1;
    end if;
    -- 插入数据
    insert into tb_user values (myid,myname,pwd);
end;

循环的用法

        while循环的使用

-- 测试创建while
 create procedure testWhile(in age int)
 begin
    -- 声明一个局部变量作为循环的条件
    DECLARE cnt int default 10;
    while cnt>0
        do
            set age = age+1;
            set cnt = cnt-1;
        end while;
    select age;
 end;

loop循环使用

create procedure testLoop(in age int)
BEGIN
    loop_1:loop
        -- 设置循环退出条件
        if age > 20 then
            leave loop_1; -- 退出循环1
        end if;

        set age = age+1;
        select '又长大了一岁';
    end loop;
    select age;
end;
call testLoop(10);

jdbc中调用储存过程

        在java中使用CallStatement进行调用

       Connection conn = DruidDBUtil.getConn();
        CallableStatement ps =null;
        //创建预编译
        try {
             ps = conn.prepareCall("call register(?,?,?)");
            //设置输入参数
            ps.setString(1,"大黄");
            ps.setString(2,"444");
            //设置输出参数
            ps.registerOutParameter(3, Types.INTEGER);

            //执行存储过程
            ps.executeUpdate();
            //获取输出参数
            int id = ps.getInt(3);

            System.out.println("新插入的id:"+id);
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }finally {
            DruidDBUtil.close(conn,ps,null);
        }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值