mysql ------ 存储过程
来源:互联网 发布:如何做一个网络问卷 编辑:程序博客网 时间:2024/06/07 18:22
数据库中的存储过程
一、存储过程
1、概念
1)以一个名字存储在数据库中的,经过预编译的,为完成特定功能的sql语句集合
2)可以独立执行或通过应用程序调用,而且允许用户声明变量
3)一旦创建,在服务器即被编译,可在需要时使用多次
4)支持过程嵌套,且可以接受和输出参数、返回执行存储过程的状态值
5)是由控制流和sql语句书写的过程
2、优点
1)存储过程只在创造时进行编译,以后每次执行存储过程都不需要重新编译,而一般的sql语句不可以这样,一次一编,所以可以提高数据库的执行速度
2)重复使用,可减少数据库开发人员的工作量
3)设定只有某些用户才具有对指定存储过程的使用权,提高安全性
二、定义存储过程p1 // “DELIMITER$$”这句是为了让解析器把“$$”当作结束标志(否则默认是把“;“号当作结束标记),这样存储过程中的语句结束符";"就不会
当作过程的结束标记。
<span style="font-size:18px;">DELIMITER$$CREATE PROCEDURE p1()BEGIN SELECT * FROM stud; INSERT INTO stud(id,sname,age,score,dept) VALUES(1014,'刘三丰',33,55,'通信学院');END$$DELIMITER; //把结束标记还原回来CALL p1(); //调用存储过程p1</span>java中实现代码
<span style="font-size:18px;">@Testpublic void testCall() throws Exception{Connection con = ConnFactory.getConn();CallableStatement cs =con.prepareCall("call pp1()");//封装存储过程的调用语句ResultSet rs = cs.executeQuery();//真正的执行while(rs.next()){System.out.println(rs.getString("sname"));}con.close();}</span>
三、带参数的存储过程
<span style="font-size:18px;">DELIMITER$$CREATE PROCEDURE p2(IN id INT, IN nm VARCHAR(30) )BEGIN INSERT INTO stud(id,sname) VALUES(id,nm);END$$DELIMITER ; DROP PROCEDURE p2;CALL p2(1015,'吊丝');</span>java中实现代码
<span style="font-size:18px;">@Test //带参数public void testCall2() throws Exception{Connection con = ConnFactory.getConn();//CallableStatement cs =con.prepareCall("call p2(1017,'lusy')");//封装存储过程的调用语句CallableStatement cs =con.prepareCall("call p2(?,?)");//带占位符封装存储过程的调用语句cs.setInt(1, 1018);cs.setString(2, "上海");cs.executeUpdate();con.close();}</span>
四、有返回值的存储过程----参数与变量问题( @变量名 ,一个@为用户变量,两个@即 @@为全局的系统变量 )
<span style="font-size:18px;">DELIMITER$$CREATE PROCEDURE p3(IN id INT, IN nm VARCHAR(30), OUT num INT )BEGIN INSERT INTO stud(id,sname) VALUES(id,nm); SELECT COUNT(*) INTO num FROM stud;END$$DELIMITER ; CALL p3(1016,'无名',@aa);SELECT @aa; //输出变量aa的值</span>java中实现代码
<span style="font-size:18px;">@Test //带参数,并接收返回值public void testCall3() throws Exception{Connection con = ConnFactory.getConn();CallableStatement cs =con.prepareCall("call p3(?,?,?)");//带占位符封装存储过程的调用语句cs.setInt(1, 1020);cs.setString(2, "益阳3");cs.registerOutParameter(3, Types.INTEGER);//cs.executeUpdate();cs.execute();//该方式下的存储过程当中可以使用任意sql操作int num = cs.getInt(3);System.out.println("返回结果:"+num);con.close();}</span>
1 0
- 【mysql】mysql存储过程
- MySQL存储过程详解 mysql 存储过程
- MySQL存储过程详解 mysql 存储过程
- MySQL存储过程详解 mysql 存储过程
- MySQL存储过程详解 mysql 存储过程
- MySQL存储过程详解 mysql 存储过程
- MySQL存储过程详解 mysql 存储过程
- MySQL存储过程详解 mysql 存储过程
- MySQL存储过程详解 mysql 存储过程
- MySQL存储过程详解 mysql 存储过程
- MySQL存储过程详解 mysql 存储过程
- MySQL存储过程详解 mysql 存储过程
- MySQL存储过程详解 mysql 存储过程
- MySQL存储过程详解 mysql 存储过程
- MySQL存储过程详解 mysql 存储过程
- MySQL存储过程详解 mysql 存储过程
- MySQL存储过程详解 mysql 存储过程
- MySQL存储过程详解 mysql 存储过程
- linux下启动tomcate
- template使用总结
- 基于hive的日志数据统计实战
- Android 之窗口小部件高级篇--App Widget 之 RemoteViews
- 【1】C++实现内核链表功能
- mysql ------ 存储过程
- myeclipse 常用快捷键
- 计算机病毒
- 对于要不断使用的uiview一般通过懒加载的形式,而不是创建一个销毁一个
- 20个设计模式和软件设计面试问题
- 张老师:4.传统线程同步通讯技术
- 利用metaclass实现python的aop
- IOException while loading persisted sessions异常
- 协议路径