MySQL连接器-使用JDBC的CallableStatements来执行存储过程

MySQL连接器-使用JDBC的CallableStatements来执行存储过程

创建存储过程demoSp:

CREATE PROCEDURE demoSp(IN inputParam VARCHAR(255), \
                        INOUT inOutParam INT)
BEGIN
    DECLARE z INT;
    SET z = inOutParam + 1;
    SET inOutParam = z;

    SELECT inputParam;

    SELECT CONCAT('zyxw', inputParam);
END

其中,我们可以这样理解,IN表示后面跟的是输入参数,INOUT后面跟的是输出参数。

要使用Connector/J来调用demoSp存储过程,有以下步骤:

1、使用Connection.prepareCall()来准备调用语句。如下:

CallableStatement cStmt = conn.prepareCall("{call demoSp(?, ?)}");
//下标是从1开始,第一个参数是输入参数
//这句是给第一个参数赋初值
cStmt.setString(1, "abcdefg");

2、注册输出参数(如果有)

输出参数是在创建存储过程时,用OUT或INOUT修饰过的变量

// 以下两种方式均可

// 1、注册输出参数,第二个参数是用INOUT修饰过
cStmt.registerOutParameter(2, Types.INTEGER);

// 2、也可以使用这种方式进行注册参数,直接用参数变量名,而不是使用索引。
cStmt.registerOutParameter("inOutParam", Types.INTEGER);

3、注册输入参数

//
// 通过索引,设置参数
//

cStmt.setString(1, "abcdefg");

//
// 也可以使用名字来设置一个参数
//

cStmt.setString("inputParam", "abcdefg");

//
// 使用索引设置'in/out'参数
//

cStmt.setInt(2, 1);

//
// 也可以使用名字来设置'in/out'参数
//

cStmt.setInt("inOutParam", 1);

4、执行CallableStatement,检索任何结果集或输出参数。

尽管CallableStatement支持调用任意的执行方法(executeUpdate(),executeQuery()或execute()),最灵活的方法是execute(),因为你不需要提前知道存储过程是否返回结果集。

...

    boolean hadResults = cStmt.execute();

    //
    // 处理所有的返回结果集
    //

    while (hadResults) {
        ResultSet rs = cStmt.getResultSet();

        // 处理结果集
        ...

        hadResults = cStmt.getMoreResults();
    }

    //
    // 检索输出参数
    //
    // Connector/J支持基本索引和基于名字来检索
    //

    int outputValue = cStmt.getInt(2); // 基于索引

    outputValue = cStmt.getInt("inOutParam"); // 基于名字

...
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值