尚学堂

JDBC CallableStatement存储过程

我要纠错

JDBC教程 - JDBC CallableStatement存储过程


CallableStatement接口可以接受运行时输入参数。

CallableStatement用于执行数据库存储过程。

Connection对象也可以创建CallableStatement来调用数据库存储过程。

例子

假设,我们有以下MySQL存储过程。

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 Emp WHERE ID = EMP_ID;
END $$

DELIMITER ;

上面的存储过程定义了两个参数,一个是EMP_ID,另一个是EMP_FIRST。它通过员工id返回员工的名字。

IN和OUT之前的参数名称告诉参数的类型。 IN用于数据输入,OUT用于数据输出。

在上面的代码中,我们传入IN的员工id,并得到OUT的名字。

我们还可以有INOUT参数,它们都可以接受值和传递值。

共有三种类型的参数:IN,OUT和INOUT。

PreparedStatement和CallableStatement都可以接受参数。

PreparedStatement对象仅使用IN参数。 CallableStatement对象可以使用所有三个。

参数 描述
IN 创建SQL语句时其值未知的参数。我们使用setXXX()方法将值传递给IN参数。
OUT 从SQL语句返回其值的参数。我们使用getXXX()方法从OUT参数中获取值。
INOUT 参数可以传入和传出值。我们用setXXX()方法绑定变量,并用getXXX()方法检索值。

以下代码显示如何调用存储过程。

conn是 Connection 的一个对象。

CallableStatement cstmt = null;
String SQL = "{call getEmpName (?, ?)}";
cstmt = conn.prepareCall (SQL);

关闭CallableStatement对象

我们需要关闭CallableStatement对象来释放资源。

首先关闭Connection对象,它也将关闭CallableStatement对象。

CallableStatement cstmt = null;
String SQL = "{call getEmpName (?, ?)}";
cstmt = conn.prepareCall (SQL);
cstmt.close();
二维码
建议反馈
二维码