最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

mysql存储过程开荒_MySQL

来源:动视网 责编:小采 时间:2020-11-09 20:09:27
文档

mysql存储过程开荒_MySQL

mysql存储过程开荒_MySQL:存储过程可以一次执行多条语句,处理复杂的业务逻辑,完成一些计算。 这篇博客总结一下mysql中存储过程基本的用法——mysql存储过程开荒。我们从怎么写存储过程和怎么调用两方面来探讨下: 一、mysql中存储过程的用法 注意下面的示例可以在mys
推荐度:
导读mysql存储过程开荒_MySQL:存储过程可以一次执行多条语句,处理复杂的业务逻辑,完成一些计算。 这篇博客总结一下mysql中存储过程基本的用法——mysql存储过程开荒。我们从怎么写存储过程和怎么调用两方面来探讨下: 一、mysql中存储过程的用法 注意下面的示例可以在mys


存储过程可以一次执行多条语句,处理复杂的业务逻辑,完成一些计算。
这篇博客总结一下mysql中存储过程基本的用法——mysql存储过程开荒。我们从怎么写存储过程和怎么调用两方面来探讨下:

一、mysql中存储过程的用法

注意下面的示例可以在mysql管理工具中(我用的navicat)直接运行,如果要在mysql客户端(dos窗口)需要加 delimiter$$ 分隔符。


首先来看第一个例子:
这个存储过程有两个int类型的输入参数,一个varchar类型的输出参数
在begin和end之前执行数据库操作或是计算,
用declare声明了一个int类型的变量,
后面是一个if 判断,注意后面需要有then 和end if,这才是完整的if判断
select语句进行输出,可以直接用select ‘*’输出,或是用as 添加一个列名
存储过程写好编译无误后,用call调用,这里需要一个输出参数,所以我们定义了一个@p_in变量

use etoak;
drop procedure if exists t1;
create procedure t1(in a int,in b int,out d varchar(30))
begin
 declare c int;
 if a is null then
 set a = 0;
 end if;
 if b is null then
 set b = 0;
 end if;
 set c = a + b;
 /* select c as sum;*/ 
 select 's' into d; 
 select d as '哈哈'; -- 
输出一列 end; /*调用存储过程*/ set @p_in = 1; call t1(10,1,@p_in);

上面我们使用if then条件判断,下面来看使用case when来完成更多的条件:

drop procedure if exists t1;
create procedure t1(in a int,in b int,out c varchar(30))
begin
 declare d int;
 set d = a+1;
 case d
 when 1 then insert into student values(null,'dx',11,now());
 when 2 then insert into student values(null,'aa',11,now());
 else insert into student values(null,'bb',11,now());
 end case;
 select * from student;
end;

再来看两个循环,一个是while do循环,一个是loop循环:


/*使用while do循环*/
create procedure t1()
begin
 declare i int DEFAULT 0;
 while i<5 DO 
 insert into student(name) values(i);
 set i=i+1;
 end while;
 select * from student;
end;

/*使用loop循环*/
drop procedure if exists t1;
create procedure t1()
begin
 declare i int DEFAULT 0;
 loop_label:LOOP 
 if i = 3 THEN 
 set i = i + 1;
 ITERATE loop_label; -- iterate相当于java循环里的continue
 end if;
 insert into student values(null,i,i,now());
 set i = i + 1;
 if i >= 5 THEN 
 leave loop_label;
 end if;
 end loop;
 select * from student;
end;

还有比较常用的模糊查询:

/*模糊查询*/
drop procedure if exists t1;
create procedure t1(in a varchar(30),out c varchar(30))
begin
 declare d int;
 select * from student where name like concat('%',a,'%');

end;

这个例子中要注意的是使用了concat拼接字符串函数。

二、在java代码中如何调用存储过程

通过上面我们知道可以在mysql客户端里面通过call调用存储过程,那在java代码里面又是如何调用的呢
我们来看下下面的例子,使用jdbc的方式调用带输入输出参数的存储过程:
存储过程为如下,实现简单的加法:

create procedure t1(in a int,in b int,out d int)
begin
 declare c int;
 if a is null then
 set a = 0;
 end if;
 if b is null then
 set b = 0;
 end if;
 set c = a + b; 
 select c into d;
end;

java中通过jdbc调用:


import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Types;

public class TestProc {
 public static void main(String[] args) throws SQLException {
 TestProc tp = new TestProc();
 int a = tp.testPro(5, 6);
 System.out.println(a); //打印
输出值 } //获取数据库连接 private static DBConnection dbConnection=null; static { if (null == dbConnection) { dbConnection = new DBConnection(); } } //执行存储过程的方法 public int testPro(int a,int b) throws SQLException{ Connection conn = null; CallableStatement stmt = null; int out = 0; String sql=""; try { conn = dbConnection.getConnection(); stmt = conn.prepareCall("{call t1(?,?,?) }"); stmt.setInt(1, a); stmt.setInt(2, b); stmt.registerOutParameter(3, Types.INTEGER); stmt.execute(); out = stmt.getInt(3); //这里获取下输出参数 }finally { dbConnection.close(conn); dbConnection.close(stmt); } return out; } }

mybatis中存储过程的调用:

声明接口:

public Map proc(Map map);

xml:

测试:

Map map = new HashMap();
 map.put("firstParam",1);
 map.put("second", 2);
 bi.proc(map);
 System.out.println(map.toString());

这里注意一下:
mybatis的入参map里面不需要put输出参数,执行完存储过程之后,会自动把输出参数放到map里面。所以我们的打印结果如下:

{second=2, firstParam=1, outParam=1}

文档

mysql存储过程开荒_MySQL

mysql存储过程开荒_MySQL:存储过程可以一次执行多条语句,处理复杂的业务逻辑,完成一些计算。 这篇博客总结一下mysql中存储过程基本的用法——mysql存储过程开荒。我们从怎么写存储过程和怎么调用两方面来探讨下: 一、mysql中存储过程的用法 注意下面的示例可以在mys
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top