今天呢,和大家一起学习探讨mysql存储过程的创建以及如何用mysql和java调用存储过程。不懂语法的同学先熟悉下的哈。
mysql创建存储过程以及调用代码:
DELIMITER &&
CREATE PROCEDURE pro_findStuentNameById(IN userId INT,OUT sname VARCHAR(50))
BEGIN
select userName INTO sname FROM zhanghua where id=userId;
END
&&
DELIMITER ;
CALL pro_findStuentNameById(40,@userName);
select @userName;
==================================================================================
简单的描述下:
DELIMITER && && DELIMITER ; DELIMITER &&声明当前段分隔符
IN表示入参,OUT表示回参 INTO表示查询出来userName的值赋给sname
调用存储过程:CALL pro_findStuentNameById(40,@userName);其中@userName表示一次会话全局变量
调用存储过程后,查询返回值:select @userName;
在mysql中创建好存储过程后,如何调用存储过程呢?代码如下:
package com.lxz.operation_callableStatement;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.Types;
import com.lxz.utils.DbUtils;
public class Test_CallableStatement {
/**
* java调用数据库存储过程:
* 加载驱动,获取数据库连接
* 写调用存储过程sql
* 获取callableStatement对象
* 设置参数值
* 执行存储过程,获取返回值
* 关闭连接,释放资源
*/
private static DbUtils dbUtils = new DbUtils();
/**
* 调用存储过程,通过id查询学生姓名
* @param id
* @return
* @throws Exception
*/
public static String findStudentById(int id) throws Exception{
Connection conn = dbUtils.getConnetction(); //获取数据库连接
String sql = "{CALL pro_findStuentNameById(?,?)}"; //调用存储过程的sql
CallableStatement csmt = conn.prepareCall(sql);
csmt.setInt(1, id); //设置第一个参数
csmt.registerOutParameter(2, Types.VARCHAR); //设置第二个参数
csmt.execute();
String userName = csmt.getString("sname");
dbUtils.close(csmt, conn);
return userName;
}
public static void main(String[] args) throws Exception {
String userName = findStudentById(41);
System.out.println(userName);
}
}