1.简介
本文使用JDBC调用 java,sql.CallableStatement来实现
2.CallableStatement介绍
public interface CallableStatement extends PreparedStatement
(引用API)作用:用于执行 SQL 存储过程的接口。JDBC API 提供了一个存储过程SQL转义语法,该语法允许对所有 RDBMS 使用标准方式调用存储过程。
此转义语法有一个包含结果参数的形式和一个不包含结果参数的形式,如果使用结果参数,则必须将其注册为 OUT 参数。其他参数可用于输入、输出或同时用于二者。
参数是根据编号按顺序引用的,第一个参数的编号是 1
{?= call <procedure-name>[(<arg1>,<arg2>, ...)]} {call <procedure-name>[(<arg1>,<arg2>, ...)]}
3.上代码前介绍:
3.1.环境:数据库Oracle
3.上代码: 存储函数的代码:create or replace function add_(v_add1 number,v_add2 number) return number is v_sum number(3); begin v_sum := v_add1 +v_add2; return v_sum; end;
Java代码:
关于out参数:如果有返回值,那么返回值是out类型,所以要注册callableStatement.registerOutParameter(...);如果是普通参数类型直接调用callableStatement.setInt(...);传参数就可以package cn.jdbc; import java.sql.CallableStatement; import java.sql.Connection; import java.sql.SQLException; import java.sql.Types; import org.junit.Test; import cn.jdbc_tools.JDBCTools; /** * CallableStatementDemo基本使用演示 * @author _jon * */ public class CallableStatementDemo { @Test public void fun(){ //求两个数之和的存储函数add_ callableStatementfun(); } private void callableStatementfun() { //加载驱动 //1.得到连接 Connection conn =null; CallableStatement callableStatement = null; try{ conn = JDBCTools.getOracleConnection(); String sql="{?=call add_(?,?)}";//带返回值的是存储函数,没有的是存储过程 //2.得到callableStatement callableStatement = conn.prepareCall(sql); //3.注册OUT参数 callableStatement.registerOutParameter(1, Types.NUMERIC); // callableStatement.registerOutParameter(2, Types.NUMERIC); // callableStatement.registerOutParameter(3, Types.NUMERIC); //4.传入的参数: callableStatement.setInt(2, 2); callableStatement.setInt(3, 7); //4.执行 callableStatement.execute(); //5.得到返回值 int sum = callableStatement.getInt(1); System.out.println(sum); }catch(SQLException e){ e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); }finally{ JDBCTools.close(null,callableStatement,conn); } } }