JDBC存储过程

在前而我们已经学习了如何使用使用JDBC存储过程,JDBC Statements。本教程是类似,但它会将有关JDBC的SQL转义语法的附加信息。

正如一个Connection对象创建Statement和PreparedStatement对象,它也创造了CallableStatement对象这将被用来执行调用数据库存储过程。

创建CallableStatement对象:

假设,需要执行以下Oracle存储过程:

CREATE OR REPLACE PROCEDURE getEmpName (EMP_ID IN NUMBER, EMP_FIRST OUT VARCHAR) ASBEGIN SELECT first INTO EMP_FIRST FROM Employees WHERE ID = EMP_ID;END;

注意: 上面已经写过Oracle存储过程,但我们正在使用MySQL数据库,写相同的存储过程对于MySQL如下,以EMP数据库中创建它:

DELIMITER $$DROP PROCEDURE IF EXISTS `EMP`.`getEmpName` $$CREATE PROCEDURE `EMP`.`getEmpName` (IN EMP_ID INT, OUT EMP_FIRST VARCHAR(255))BEGIN SELECT first INTO EMP_FIRST FROM Employees WHERE ID = EMP_ID;END $$DELIMITER ;

三种类型的参数有:IN,OUT和INOUT。PreparedStatement对象只使用IN参数。 CallableStatement对象可以使用所有的三个。

这里是每个定义:

参数 描述
IN 它的值是在创建SQL语句时未知的参数。将值绑定到setXXX()方法的参数。
OUT 其值是由它返回的SQL语句提供的参数。你从OUT参数的getXXX()方法检索值。
INOUT 同时提供输入和输出值的参数。绑定setXXX()方法的变量,并与getXXX()方法检索值。

下面的代码片段显示了如何使用该Connection.prepareCall()方法实例化基于上述存储过程CallableStatement对象: