Mysql存储过程语法讲解,以及如何用Java调用!
存储过程(Stored Procedure)是一种在数据库中存储复杂程序,以便外部程序调用的-种数据库对象。
存储过程是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行。
其实存储过程思想上很简单,就是数据库SQL语言层面的代码封装与重用。
优缺点分析:
优点:
1.存储过程可封装, 并隐藏复杂的商业逻辑。
2.存储过程可以回传值,并可以接受参数。
3.存储过程无法使用 SELECT指令来运行,因为它是子程序,与查看表,数据表或用户定义函数不同。
4.存储过程可以用在数据检验, 强制实行商业逻辑等。
缺点
1.存储过程,往往定制化于特定的数据库上,因为支持的编程语言不同。当切换到其他厂商的数据库系统时,需要重写原有的存储过程。
2.存储过程的性能调校与撰写,受限于各种数据库系统。
语法
在linux系统下操作Mysql:
1.先进入数据库
mysql -u root -p 1234
2.声明结束符号,语句的结束符号从分号;临时改为一个$(可以是自定义)
delimiter $
3.声明存储过程:
create procedure proc_demo(in p_ in int)
4.变量定义:
declare id_int int unsigned default 1001
变量赋值
set useid=1
5.存储过程开始和结束符号:
begin end
6.创建mysql存储过程:
create procedure 存储过程名(参数)
7.调用存储过程:
call 存储过程名(赋值)
8.MySQL存储过程的查询,查看某个数据库下面的存储过程
select name from mysql.存储过程名 where db='数据库名’
或
show procedure status where db=‘数据库名’;
9.查看存储过程的详细信息
show create procedure 数据库.存储过程名
10.MySQL存储过程的修改
alter procedure 存储过程名
11.MySQL存储过程的删除
drop procedure 存储过程名
12.条件语句
- if-then-else 语句
delimiter //
mysql > create procedure proc2(IN parameter int) -> begin -> declare var int; -> set var=parameter+1; -> if var=0 then -> insert into t values(17); -> end if; -> if parameter=0 then -> update t set s1=s1+1; -> else -> update t set s1=s1+2; -> end if; -> end; -> //
mysql > delimiter ;
2.case 语句
mysql > delimiter //
mysql > create procedure proc3 (in parameter int) -> begin -> declare var int; -> set var=parameter+1; -> case var -> when 0 then -> insert into t values(17); -> when 1 then -> insert into t values(18); -> else -> insert into t values(19); -> end case; -> end; -> //
mysql > delimiter ;
casewhen var=0 theninsert into t values(30);when var>0 thenwhen var<0 thenelse
end case
13.循环语句
1.while ···· end while
while 条件 do
–循环体
end while
mysql > delimiter //
mysql > create procedure proc4() -> begin -> declare var int; -> set var=0; -> while var<6 do -> insert into t values(var); -> set var=var+1; -> end while; -> end; -> //
mysql > delimiter ;
2.repeat···· end repea
它在执行操作后检查结果,而 while 则是执行前进行检查。
repeat
–循环体
until 循环条件
end repeat;
mysql > delimiter //
mysql > create procedure proc5() -> begin -> declare v int; -> set v=0; -> repeat -> insert into t values(v); -> set v=v+1; -> until v>=5 -> end repeat; -> end; -> //
mysql > delimiter ;
3.loop ·····end loop
loop 循环不需要初始条件,这点和 while 循环相似,同时和 repeat 循环一样不需要结束条件, leave 语句的意义是离开循环。
mysql > delimiter //
mysql > create procedure proc6() -> begin -> declare v int; -> set v=0; -> LOOP_LABLE:loop -> insert into t values(v); -> set v=v+1; -> if v >=5 then -> leave LOOP_LABLE; -> end if; -> end loop; -> end; -> //
mysql > delimiter ;
14.MySQL存储过程的参数用在存储过程的定义,共有三种参数类型,IN,OUT,INOUT
IN 输入参数:表示调用者向过程传入值(传入值可以是字面量或变量)
OUT 输出参数:表示过程向调用者传出值(可以返回多个值)(传出值只能是变量)
INOUT 输入输出参数:既表示调用者向过程传入值,又表示过程向调用者传出值(值只能是变量)
参数定义可以是一个,可以是两个,也可以是三个
创建存储过程案例
delimiter $create procedure proc_demo(in usid integer)begindelete from userinfos where userid=:usid;end$delimiter ;
call proc_demo(2); call调用存储过程并传参
注意
begin end 之间可以是SQL语句,也可以给变量赋值;
当sql中参数的值要去赋值时语法必须是 sql参数=: 传参
如果存储过程没有参数,也必须在过程名后面写上小括号
delimiter $
create procedure proc_sum(in num1 integer,in num2 integer,out sums integer)beginset sums=num1+num2; end$delimiter ;
解析
在存储过程中设置了需要传参的变量num1和num2,调用存储过程的时候,通过调用存储过程call proc_sum()传参将值给num1和num2,然后进行存储过程里的SQL操作。
用java调用存储过程
导Mysql依赖包
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.38</version>
</dependency>
@SpringBootApplication
@EnableScheduling
public class ConnMySql (
public static void main (String[] args) throws Exception{// 1.加载驱动Class.forName ("com.mysql.jdbc.Driver") ;try{// 2.连接数据库Connection conn = DriverManager.getConnection("jdbc:mysql://192.168.56.44:3306/tpshop","root","1234") ;//3.调用存储过程CallableStatement cstmt = conn prepareCall ("(call proc_sum(?,?,?) )")//call proc_sum(?,?,?) 调用的存储过程中有3个参数,用3个?表示}catch{//第一个参数是in输入型cstmt.setInt (1, 4);//第二个参数是in输入型 cstmt.setInt (2,5); //注册输出参数//第3个参数是输出型,用来接收out结果cstmt.registerOutParameter(3, Types.INTEGER) ; cstmt.execute () ;System.out.println ( "执行结果是: "+cstmt.getInt(3));cstmt.close();}
}
}
Mysql存储过程语法讲解,以及如何用Java调用!相关推荐
- MySQL存储过程语法
MySQL存储过程语法 1.语法结构 2.变量及赋值 2.1.局部变量 2.2.用户变量 2.3.全局变量: 3.出参和入参 4.流程控制 4.1.判断 4.1.1.IF 4.1.2.CASE 4.2 ...
- mysql的存储过程正负数的变化_《转》mysql存储过程语法及范例
<转>mysql存储过程语法及实例 存储过程如同一门程序设计语言,同样包含了数据类型.流程控制.输入和输出和它自己的函数库. --------------------基本语法------- ...
- mysql存储过程语法 if_mysql存储过程语法 if
MySql存储过程 MySQL 存储过程是从 MySQL 5.0 开始增加的新功能.存储过程的优点有一箩筐.不过最主要的还是执行效率和SQL 代码封装.特别是 SQL 代码封装功能,如果没有存储过程, ...
- mysql存储过程语法及实例
存储过程如同一门程序设计语言,同样包含了数据类型.流程控制.输入和输出和它自己的函数库. --------------------基本语法-------------------- 一.创建存储过程 c ...
- mysql存储过程语法大全
http://dev.mysql.com/doc/refman/5.1/zh/stored-procedures.html#flow-control-constructs 第20章:存储程序和函数 目 ...
- mysql存储过程语法错误1064_mysql,dos下执行SQL语句创建存储过程出错ERROR 1064 (42000):...
update1.sql的内容为 DROP PROCEDURE IF EXISTS pcName; CREATE PROCEDURE pcName() BEGIN select 'a'; END; do ...
- mysql存储过程语法和游标的语法_MySQL游标存储过程-语法点滴
CREATE PROCEDURE my_proc() BEGIN -- 需要定义接收游标数据的变量 DECLARE sname VARCHAR(100); DECLARE cattype VARCHA ...
- java epson_如何用Java调用Epson TM-U220PD来打印USB端口
我正试图在Windows 7中的EPSON TM-U220PD上打印,我用Java做它 . 我正在开发一个餐厅打印订单的软件 . 我在Linux上做了软件,当我在linux上连接打印机时,打印机工作得 ...
- 如何用java调用 Python开发的算法模型
Hprose是一个高性能的远程对象服务引擎. 它是一个现代的.轻量级的.跨语言的.跨平台的.面向对象的.高性能的.远程动态通信中间件.它不仅易于使用,而且功能强大.你只需要一点时间来学习,就可以用它轻 ...
最新文章
- combobox 怎么实现对listview的类别查询_通过 Django Pagination 实现简单分页
- java实现excel文件上传_java相关:SpringMVC下实现Excel文件上传下载
- docker安装和配置Grafana
- golang ffmpeg 做网络直播
- 贪心只能过样例 loj515
- [vue-cli]怎么使用vue-cli3创建一个项目?
- JAVA中用于处理字符串的 三兄弟
- DG导入mysql依赖包_mysql 命令行快速导出数据,导入数据
- java gc_Java GC的那些事(1)
- 类对象模型实验:类数据成员大小
- JAVA实现126邮箱发送及部署后发送邮箱报错问题
- 五款超级易用的网络监控软件
- MacOS下无屏幕通过共享WiFi的方式为树莓派4B安装64-bit系统
- 如何搭建属于自己的腾讯云服务器
- C#调用C++ dll中uchar*参数
- python中的copy()与deepcopy()
- 形容人的内核是什么意思_请问甜文的内核是什么?
- java存款取款程序_JAVA实现账户取款和存款操作
- 如何提高 matlab 计算速度 运算效率
- Linux 的信号量