使用的是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 } }
原文链接:https://blog.csdn.net/qq_38238041/article/details/82774944