创建事务
delimiter //
CREATE PROCEDURE sp_count(OUT param INT)
BEGIN
SELECT COUNT(*) INTO param FROM persons;
END
//
package test;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Types;
import org.junit.Before;
import org.junit.jupiter.api.Test;
/**
*@author :王团结
*@version: 2019年6月20日上午10:48:28
*类说明:
*/
public class TestCallableStatement {
private Connection conn;
/**
*
*/
@Before
public void iniConn() {
// 注册驱动程序、连接、时区一定要加上
String url = "jdbc:mysql://localhost:3306/mybase?serverTimezone=UTC";
String username = "root";
String password = "18339401841";
try {
// 获得连接
conn = DriverManager.getConnection(url, username, password);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* select
* @throws Exception
*/
@Test
public void test1() throws Exception {
iniConn();
//输出
String sql="{call sp_count(?)}";
//创建
CallableStatement cst=conn.prepareCall(sql);
//注册输出参数
cst.registerOutParameter(1, Types.INTEGER);
//执行存储过程
cst.execute();
//取得输出的参数
int id=cst.getInt(1);
System.out.println(id);
}
/**
* select
* @throws Exception
*/
@Test
public void sp_add() throws Exception {
iniConn();
//输出
String sql="{call sp_add(?,?,?)}";
//创建
CallableStatement cst=conn.prepareCall(sql);
//对于输入 参数需要绑定参数值
cst.setInt(1, 2);
cst.setInt(2, 2);
//注册输出参数
cst.registerOutParameter(3, Types.INTEGER);
//执行存储过程
cst.execute();
//取得输出的参数
int id=cst.getInt(3);
System.out.println(id);
}
/**
* select
* @throws Exception
*/
@Test
public void sp_subtract() throws Exception {
iniConn();
//输出
String sql="{call sp_subtract(?,?)}";
//创建
CallableStatement cst=conn.prepareCall(sql);
//对于输入 参数需要绑定参数值
cst.setInt(1, 2);
cst.setInt(2, 2);
//注册输出参数
cst.registerOutParameter(2, Types.INTEGER);
//执行存储过程
cst.execute();
//取得输出的参数
int id=cst.getInt(2);
System.out.println(id);
}
/**
* select
* @throws Exception
*/
@Test
public void sp_biginsert() throws Exception {
iniConn();
//输出
String sql="{call sp_biginsert(?)}";
//创建
CallableStatement cst=conn.prepareCall(sql);
//对于输入 参数需要绑定参数值
cst.setInt(1, 100000);
//执行存储过程
cst.execute();
//取得输出的参数
}
/**
* 调用函数
* SET GLOBAL log_bin_trust_function_creators = 1;
*CREATE FUNCTION f_sum(a INT,b int) RETURNS INT
*RETURN a+b;
* @throws Exception
*/
@Test
public void f_sum() throws Exception {
iniConn();
//输出
String sql="{?=call f_sum(?,?)}";
//创建
CallableStatement cst=conn.prepareCall(sql);
cst.setInt(2, 100);
cst.setInt(3, 200);
cst.registerOutParameter(1, Types.INTEGER);
//执行存储过程
cst.execute();
int res=cst.getInt(1);
//取得输出的参数
System.out.println(res);
}
}