JDBC(13)—JDBC调用存储过程和函数

来源:互联网 发布:网络阅读媒介有哪些 编辑:程序博客网 时间:2024/05/20 18:47
  1. 步骤:
    JDBC调用存储过程和函数
    步骤:

    ①:通过Connection对象的prepareCall()方法创建一个CallableStatement对象的实例,在使用Connection对象的preparedCall()方法时,需要传入一个String类型的字符串,该字符串指明如何调用存储过程。
    函数: [? = call [(,, … )]]
    存储过程: [call [(,, … )]]

    ②:通过CallableStatement对象reisterOutParameter方法注册OUT参数

    ③:通过CallableStatement对象setXxx()方法设定IN或IN OUT参数,若想把参数设为null,使用setNull()方法

④:通过CallableStatement对象的execute()方法执行存储过程。

⑤:如果调用的是带返回值的存储过程,还需要CallableStatement对象的getXxx()方法获取其返回值。
注:通过数据字典查看存储过程或函数的定义。

2 .示例代码
java调用存储过程

    /**     * 调用存储过程     */    @Test    public void testCallableStatement(){        Connection conn = null;        CallableStatement callablestatement = null;        try {            conn = TestTools.getConnection();            String sql = "{ call add0 (?, ?, ?) }";            //1.获取CallableStatement类是对象            callablestatement = conn.prepareCall(sql);            //2.注册OUT参数            callablestatement.registerOutParameter(3, Types.NUMERIC);            //3.通过setXxx()方法设定IN或OUT参数值            callablestatement.setInt(1, 10);            callablestatement.setInt(2, 20);            //4.执行存储过程            callablestatement.execute();            //5.若有返回值,需要使用getXxx()接收            int sum = callablestatement.getInt(3);            System.out.println("结果:"+sum);//结果:30        } catch (Exception e) {            e.printStackTrace();        }finally{            TestTools.release(callablestatement, conn);        }    }

创建存储过程的SQL语句

#定义有返回值的存储过程,大小写无所谓,功能:计算两个数的值#注意:过程名不能使用addCREATE PROCEDURE add0(IN a INT,IN b INT,OUT result INT)BEGIN    IF a IS NULL THEN SET a = 0;    END IF;    IF b IS NULL THEN SET b = 0;    END IF;    SET result = a + b;    SELECT result AS SUM;END;#调用存储过程call add0 (10, 20, @result); ##定义无返回值的存储过程,大小写无所谓,功能:计算两个数的值CREATE PROCEDURE add1( a INT, b INT)BEGIN    DECLARE result INT;    IF a IS NULL THEN SET a = 0;    END IF;    IF b IS NULL THEN SET b = 0;    END IF;    SET result = a + b;    SELECT result AS SUM;END;#调用存储过程call add1 (10, 20); 

java调用函数

    /**     * 调用函数     */    @Test    public void testCallableStatement1(){        Connection conn = null;        CallableStatement callablestatement = null;        try {            conn = TestTools.getConnection();            String sql = "{? = call add_fun (?, ?) }";            //1.获取CallableStatement类是对象            callablestatement = conn.prepareCall(sql);            //2.注册OUT参数,其中1表示第一个问号,表示输出            callablestatement.registerOutParameter(1, Types.NUMERIC);            //3.通过setXxx()方法设定IN或OUT参数值,2,3表示第二个和第三个问号,表述输入。            callablestatement.setInt(2, 10);            callablestatement.setInt(3, 20);            //4.执行存储过程            callablestatement.execute();            //5.若有返回值,需要使用getXxx()接收            int sum = callablestatement.getInt(1);            System.out.println("结果:"+sum);        } catch (Exception e) {            e.printStackTrace();        }finally{            TestTools.release(callablestatement, conn);        }    }

创建函数的mysql语句:

#创建有返回值的函数,注意分号不要少create function add_fun(a int, b int)returns int begin        declare c int;        set c = a + b;        return c;end;#调用函数select add_fun(10,10) as sum