codecamp

OceanBase 使用 CallableStatements 调用存储过程

OceanBase Connector/J 的 CallableStatement 接口支持调用存储过程。

CallableStatement 支持使用 executeUpdate()executeQuery() 或 execute() 方法调用 Statement 执行存储过程。其中最灵活的调用方法是 execute(),因为您无需提前知道存储过程是否返回结果集。

如下为一个存储过程示例,该存储过程返回以 1 递增的 inOutParam 值,以及使用 inputParam 作为 ResultSet 来输入字符串。

CREATE PROCEDURE obSp(IN inputParam VARCHAR(100),
                        INOUT inOutParam INT)
BEGIN
    DECLARE n INT;
    SET n = inOutParam + 1;
    SET inOutParam = n;

    SELECT inputParam;

    SELECT CONCAT('zhang', inputParam);
END

根据如下步骤调用上述示例中的 obSp 存储过程:

  1. 通过使用 Connection.prepareCall() 准备可调用语句。

    示例如下:

    import java.sql.CallableStatement;
    
    ...
    
    
    
        CallableStatement cSt = conn.prepareCall("{call obSp(?, ?)}");
    
    
        cSt.setString(1, "asdfg");
  2. 注册输出参数(如果存在)

    为了检索输出参数的值(在创建存储过程时指定为 OUT 或 INOUT 的参数),OceanBase Connector/J 要求在执行语句之前使用 CallableStatement 接口中的 registerOutputParameter() 方法指定输出参数的值。示例如下:

    import java.sql.Types;
    ...
        cSt.registerOutParameter(2, Types.INTEGER);
    
        cSt.registerOutParameter("inOutParam", Types.INTEGER);
    ...
  3. 设置输入参数(如果存在)。

    输入和输入/输出参数的设置与 PreparedStatement 对象相同。但是,CallableStatement 也支持按名称设置参数。示例如下:

         cSt.setString(1, "asdfg");
    
         cSt.setString("inputParam", "asdfg");
    
    
         cSt.setInt(2, 1);
    
         cSt.setInt("inOutParam", 1);
    
    ...
  4. 执行 CallableStatement,并检索任何结果集或输出参数。

    示例如下:

    ...
    
        boolean obResults = cSt.execute();
    
           while (obResults) {
            ResultSet rs = cSt.getResultSet();
    
    
            ...
    
            obResults = cSt.getMoreResults();
        }
    
        int outputValue = cSt.getInt(2); 
    
        outputValue = cSt.getInt("inOutParam"); 
    
    ...
OceanBase CHAR、VARCHAR 和 RAW 数据类型
OceanBase 数据源概述
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

OceanBase 控制台指南

OceanBase ODC 使用指南

OceanBase Web 版 ODC

OceanBase 客户端版 ODC

OceanBase Connector/J 开发者指南

OceanBase 什么是OceanBase Connector/J

OceanBase SQL 参考(MySQL 模式)

OceanBase SQL 参考(Oracle 模式)

OceanBase 基本元素

OceanBase 数据库对象

OceanBase 函数

OceanBase 单行函数

OceanBase 返回数字的字符串函数

OceanBase 通用比较函数

OceanBase 编码解码函数

OceanBase SQL 调优指南

OceanBase 相关协议

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }