CallableStatement的使用(存储过程)

使用的是MySQL

现在数据库中添加几个存储过程如下

#创建存储过程
#1.空参
DELIMITER $$
CREATE PROCEDURE p1( )
BEGIN 
  INSERT INTO pp(NAME)VALUES('x1');
  INSERT INTO pp(NAME)VALUES('x2');
  SELECT * FROM pp;
END $$
DELIMITER ;

#2.带参
DELIMITER $$
CREATE PROCEDURE p2( IN nm VARCHAR(10) )
BEGIN
  INSERT INTO pp(NAME) VALUES(nm);
  SELECT * FROM pp;
END $$
DELIMITER ;

#3.带参,带返回值
DELIMITER $$
CREATE PROCEDURE p3(IN nm VARCHAR(10),OUT con INT )
BEGIN 
  INSERT INTO pp(NAME) VALUES(nm);
  SELECT COUNT(1) INTO con FROM pp;
  SELECT * FROM pp;
END $$
DELIMITER ;

在数据库中调用存储过程的方式如下:

#调用存储过程
#1.空参
CALL p1();
#2.带参
CALL p2('带参');
#3.带参,带返回值
CALL p3('有返回值',@con);
SELECT @con;

在Java中调用:

package cn.bl.v2;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Types;

import org.junit.Test;

import cn.bl.DBUtil;

/**
 * 存储过程的调用,一般不会在这里创建存储过程,而是只是调用
 * @author BarryLee
 * @2018年9月19日@下午4:40:02
 */
public class CallableStatementDemo {
	
	//空参调用
	@Test
	public void test1() throws Exception {
		Connection conn = DBUtil.getConnection();
		CallableStatement cs = conn.prepareCall("call p1()");//call p1 -- 不带括号也行
		cs.execute();
		conn.close();
	}
	
	//有参调用
	@Test
	public void test2()  throws Exception {
		Connection conn = DBUtil.getConnection();
		CallableStatement cs = conn.prepareCall("call p2('BarryLee')");
		cs.execute();
		conn.close();
	}
	
	//有参并有返回值调用
	@Test
	public void test3() throws Exception {
		Connection conn = DBUtil.getConnection();
		CallableStatement cs = conn.prepareCall("call p3(?,?)");
		cs.setString(1, "BarryLee");
		cs.registerOutParameter(2, Types.INTEGER);//注册一个输出参数
		cs.execute();//执行
		ResultSet set = cs.getResultSet();//获取输出结果
		while(set.next()) {
			System.out.print(set.getString("name")+" ");
		}
		//获取输出参数的结果
		int i = cs.getInt(2);//之前注册的第几个就是多少
		System.out.println("i:"+i);
		//结果如下
		//jack tom prince littlef lkjl 小梨花 空杯 带参 有返回值 BarryLee BarryLee BarryLee i:12
	}
}

 

  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值