如何从 JDBC 中的存储过程中获取输出

Posted

技术标签:

【中文标题】如何从 JDBC 中的存储过程中获取输出【英文标题】:How to get output from stored procedure in JDBC 【发布时间】:2017-07-24 23:07:43 【问题描述】:

我正在尝试使用 JDBC,并且我已经创建了一个存储过程。我想调用存储过程,然后使用 Java 中的System.out.println 输出数据输出。我怎么做?

下面是我原来的存储过程。我想让这个工作,但从阅读中我不知道是否有可能

DELIMITER $$
            CREATE
            PROCEDURE CountMembers()
            BEGIN
            SELECT COUNT(MEMBER_ID) FROM Members;
            END $$
    DELIMITER ;

这是我将其更改为的内容,因为它似乎得到了输出,这可能是必须要做的。

DELIMITER $$
        CREATE
        PROCEDURE CountMembers(OUT m_count VARCHAR(30))
        BEGIN
        SELECT COUNT(MEMBER_ID) INTO m_count FROM Members;
        END $$
DELIMITER ;

我知道要运行它,我必须创建一个可调用的语句,然后我看到String userCount = callableStatement.getString(1); 可以从哪里获得输出。基本上我已经阅读了很多信息,但我很难把它们放在一起。

【问题讨论】:

请edit您的问题标记您正在使用的特定数据库平台。看起来可能是mysql,但最好尽可能具体。 刚刚添加,谢谢。 引用块用于引用外部资源,而不是用于强调您自己的文本;我已编辑您的问题以删除它们。 【参考方案1】:

首先,请注意 COUNT(MEMBER_ID) 将返回一个整数值,但您将其选择到 VARCHAR 变量中。

接下来,我认为您正在寻找类似的东西:

    CallableStatement stm = connection.prepareCall(" call CountMembers(?) ");
    stm.registerOutParameter(1, Types.VARCHAR);
    stm.execute();
    String m_count = stm.getString(1);
    stm.close();

【讨论】:

成功了!谢谢你。但是,我确实必须将final String DB_URL = "jdbc:mysql://ipaddress:3306/test?noAccessToProcedureBodies=true" 添加到我的代码中,因为我收到一条错误消息,提示“无法访问确定存储过程参数类型所需的元数据”。以防万一任何用户最终遇到我同样的问题。

以上是关于如何从 JDBC 中的存储过程中获取输出的主要内容,如果未能解决你的问题,请参考以下文章

如何获取存储过程以输出从 SQL*Plus 中的 select 语句返回的表?

使用 JDBC 从存储过程中获取 Oracle 表类型

如何获取作为数组工作的存储过程输出参数?

从 PHP 中的存储过程获取输出

如何从存储过程中获取输出参数结果和查询结果?

从java中的mysql存储过程中获取参数