mysql存储过程(完善中)


--存储过程:概念类似于函数,就是把一段代码封装起来
--当要执行一点代码的时候,可以调用存储过程
--在封装的语句体里面,可以用,if/else/case/while等结构
--设置编码     setnames -gbk

--查看存储过程
show procedure status;

--删除现有的存储过程
drop procedure p1;

--体会控制结构
create procedure p2( n int ,b char(1)  )
begin
if b='h' then 
  select * from g where num > n ;
else 
select * from g where num < n;
end if;
end$

--计算1->n的和
create procedure p3(n smartint )
begin
declare i int;
declare s int;
set i=1;
set s=0;
while i<= n do
set s=s+i;
set i=i+1;
end while;
select s from g;--输出总量
end$

--调用存储工程
call  p3();


MySQL 存储过程参数(in) 
MySQL 存储过程 “in” 参数:跟 C 语言的函数参数的值传递类似, MySQL 存储过程内部可能会修改
此参数,但对 in 类型参数的修改,对调用者(caller)来说是不可见的(not visible) 。 
MySQL 存储过程参数(out) 
MySQL 存储过程 “out” 参数:从存储过程内部传值给调用者。在存储过程内部,该参数初始值为 null,
无论调用者是否给存储过程参数设置值 
MySQL 存储过程参数(inout) 
MySQL 存储过程 inout 参数跟 out 类似,都可以从存储过程内部传值给调用者。不同的是:调用者还
可以通过 inout 参数传递值给存储过程。 
总结 
如果仅仅想把数据传给 MySQL 存储过程,那就使用“in” 类型参数;如果仅仅从 MySQL 存储过程返回
值,那就使用“out” 类型参数;如果需要把数据传给 MySQL 存储过程,还要经过一些计算后再传回给我
们,此时,要使用“inout” 类型参数。 

--删除存储过程 
DROP PROCEDURE IF EXISTS proc_employee_findById; 
--创建存储过程 
CREATE PROCEDURE proc_employee_findById(in n int) 
BEGIN 
     SELECT * FROM employee where id=n; 
END 
--定义变量 
SET @n=1; 
--调用存储过程 
CALL proc_employee_findById(@n);

1.12 Java 代码调用存储过程(JDBC) 
相关 API:java.sql.CallableStatement 
使用到 java.sql.CallableStatement 接口,该接口专门用来调用存储过程; 
该对象的获得依赖于 java.sql.Connection; 
通过 Connection 实例的 prepareCall()方法返回 CallableStatement 对象 
prepareCall()内部为一固定写法{call 存储过程名(参数列表 1,参数列表 2)}可用?占位 
eg: connection.prepareCall("{call proc_employee(?)}"); 
存储过程中参数处理: 
输 入 参 数 : 通过 java.sql.CallableStatement 实例 的 setXXX()方 法 赋 值, 用 法 等 同于
java.sql.PreparedStatement 
输出参数:通过 java.sql.CallableStatement 实例的 registerOutParameter(参数位置, 参数
类型)方法赋值,其中参数类型主要使用 java.sql.Types 中定义的类型 
Java 代码调用带输入参数的存储过程 (根据输入 ID 查询雇员信息) 
public void executeProcedure() 
try { 
/** 
* callableStatement java.sql.CallableStatement 
* connection java.sql.Connection 
 * jdbc调用存储过程原型 
 * {call 存储过程名(参数列表1,参数列表2)} 可用?代替 
 */ 
跟我一起学 MySQL 存储过程 
     callableStatement=connection.prepareCall("{call  proc_employee_findById(?)}"); 
     callableStatement.setInt(1, 1); //设置输入参数 
     resultSet=callableStatement.executeQuery();//执行存储过程 
     if(resultSet.next()) 
    
          System.out.println(resultSet.getInt(1)+"\t"+resultSet.getString(2)); 
    
     } catch (SQLException e) { 
          e.printStackTrace(); 
    
Java 代码调用带输出参数的存储过程 (返回数据库中的记录数) 
public void executeProcedure() 
try { 

/** 
 * callableStatement java.sql.CallableStatement 
 * connection java.sql.Connection 
 * jdbc调用存储过程原型 
 * {call 存储过程名(参数列表1,参数列表2)} 可用?代替 
  */   
callableStatement=connection.prepareCall("{call 
proc_employee_getCount(?)}"); 
//设置输出参数 
  callableStatement.registerOutParameter(1, Types.INTEGER); 
//执行存储过程 
  resultSet=callableStatement.executeQuery(); 
if(resultSet.next()) 
    System.out.println(resultSet.getInt(1));   
} catch (SQLException e) { 
    e.printStackTrace(); 


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值