mysql之存储过程

      今天呢,和大家一起学习探讨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);
	}

}

 

你可能感兴趣的:(JDBC)