• 使用JDBC的CallableStatements来执行存储过程

    使用JDBC的CallableStatements来执行存储过程

    创建存储过程demoSp:

    1. CREATE PROCEDURE demoSp(IN inputParam VARCHAR(255), \
    2. INOUT inOutParam INT)
    3. BEGIN
    4. DECLARE z INT;
    5. SET z = inOutParam + 1;
    6. SET inOutParam = z;
    7. SELECT inputParam;
    8. SELECT CONCAT('zyxw', inputParam);
    9. END

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

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

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

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

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

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

    1. // 以下两种方式均可
    2. // 1、注册输出参数,第二个参数是用INOUT修饰过
    3. cStmt.registerOutParameter(2, Types.INTEGER);
    4. // 2、也可以使用这种方式进行注册参数,直接用参数变量名,而不是使用索引。
    5. cStmt.registerOutParameter("inOutParam", Types.INTEGER);

    3、注册输入参数

    1. //
    2. // 通过索引,设置参数
    3. //
    4. cStmt.setString(1, "abcdefg");
    5. //
    6. // 也可以使用名字来设置一个参数
    7. //
    8. cStmt.setString("inputParam", "abcdefg");
    9. //
    10. // 使用索引设置'in/out'参数
    11. //
    12. cStmt.setInt(2, 1);
    13. //
    14. // 也可以使用名字来设置'in/out'参数
    15. //
    16. cStmt.setInt("inOutParam", 1);

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

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

    1. ...
    2. boolean hadResults = cStmt.execute();
    3. //
    4. // 处理所有的返回结果集
    5. //
    6. while (hadResults) {
    7. ResultSet rs = cStmt.getResultSet();
    8. // 处理结果集
    9. ...
    10. hadResults = cStmt.getMoreResults();
    11. }
    12. //
    13. // 检索输出参数
    14. //
    15. // Connector/J支持基本索引和基于名字来检索
    16. //
    17. int outputValue = cStmt.getInt(2); // 基于索引
    18. outputValue = cStmt.getInt("inOutParam"); // 基于名字
    19. ...

    如果你想在MySQL>里调用存储过程,请参考:Call Syntax

    原文: https://strongyoung.gitbooks.io/mysql-reference-manual/content/mysql_connector/jdbc_concepts/using_jdbc_callablestatements_to_execute_stored_pr.html