mysql存储过程.详细说明,java代码调用过程
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Mysql存储过程调用
说明:
由括号包围的参数列必须总是存在。如果没有参数,也该使用一个空参数列()。每个参数默认都是一个IN参数。要指定为其它参数,可在参数名之前使用关键词OUT或INOUT
在mysql客户端定义存储过程的时候使用delimiter命令来把语句定界符从;变为//。
当使用delimiter命令时,你应该避免使用反斜杠(‘"’)字符,因为那是MySQL的转义字符。
1、创建过程格式:
Mysql> drop procedure if exists user_findById;
Mysql> delimiter //
Create procedure user_findById(in n int)
Begin
Select * from user where id= n;
End
//
调用过程:
Mysql> set @n=1; --定义变量
Call user_findById(@n);--调用过程
// --显示结果
======================================================
例2:
Mysql> drop procedure if exists user_count;
Mysql> delimiter //
Create procedure user_count(out count int)
Begin
Select count(*) into count from user;
End
// --结束
注意:
MySQL存储过程
“in”参数:
跟 C语言的函数参数的值传递类似, MySQL存储过程内部可能会修改此,参数,但对 in类型参数的修改,对调用者(caller)来说是不可见的(not visible)。
“out”参数:
从存储过程内部传值给调用者。在存储过程内部,该参数初始值为 null,无论调用者是否给存储过程参数设置值inout参数跟 out类似,都可以从存储过程内部传值给调用者。不同的是:调用者还可以通过 inout参数传递值给存储过程。
总结:如果仅仅想把数据传给MySQL存储过程,那就使用“in”类型
参数;如果仅仅从MySQL存储过程返回值,那就使用“out”类型参数;如果需要把数据传给MySQL存储过程,还要经过一些计算后再传回给我们,
此时,要使用“inout”类型参数。
JAVA中调用过程:
/**
* 调用过程cal_ning,计算class_id班的最高成绩和名字 * @param class_id 班号
*/
public static void callProc(int class_id){
String sql = "{call cal_ning(?,?,?)}";
//获得连接
Connection conn = null;
CallableStatement stmt = null;
//构造语句对象,传递过程及参数,返回结果
try{
conn = ConnectionUtils.getConnection();// 工具类获得连接
stmt = conn.prepareCall(sql);
//输入参数,
stmt.setInt(1, class_id);
//注册输出参数的位置和类型
stmt.registerOutParameter(2, Types.CHAR);
stmt.registerOutParameter(3, Types.INTEGER);
//执行
stmt.execute();
//取出过程运行的结果,指定输出参数的位置
String name = stmt.getString(2);
int score = stmt.getInt(3);
System.out.println(name.trim() + " : " + score); }catch(Exception e){
e.printStackTrace();
}finally{
//关闭资源
ConnectionUtils.close(stmt);
ConnectionUtils.close(conn);
}
例2:
/**
* 调用过程ProcLogin_ning,输入两个参数,返回结果
* @param id 考生id
* @param pwd 考生密码
* @return 成功:1; id正确,pwd错:0; 没有id: -1
*/
public static int login(int id, String pwd){ int flag = -1;
String sql = "{call proclogin_ning(?,?,?) }";
Connection conn = null;
CallableStatement stmt = null;
try{
conn = ConnectionUtils.getConnection();
stmt = conn.prepareCall(sql);
stmt.setInt(1, id);
stmt.setString(2, pwd);
stmt.registerOutParameter(3, Types.INTEGER);
stmt.execute();
flag = stmt.getInt(3);
}catch(Exception e){
e.printStackTrace();
}finally{
ConnectionUtils.close(stmt);
ConnectionUtils.close(conn);
}
return flag;
}