千家信息网

MySQL中如何使用存储过程

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章将为大家详细讲解有关MySQL中如何使用存储过程,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。使用CallableStatements执行存储过程mysql
千家信息网最后更新 2026年11月02日MySQL中如何使用存储过程

这篇文章将为大家详细讲解有关MySQL中如何使用存储过程,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

使用CallableStatements执行存储过程

mysql版本:5.0
Connector/J的版本:3.1.1以上(java.sql.CallableStatement接口已完全实现,除了getParameterMetaData()方法)
MySQL的存储过程语法在MySQL参考手册的"存储过程和函数"一章.
http://www.mysql.com/doc/en/Stored_Procedures.html
下面是一个存储过程,返回一个inOutParam增1后的值,以ResultSet形式传入一个字符串参数inputParam.
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

要通过connector/J使用demoSp这个存储过程,要经过几个步骤:
1.Connection.prepareCall()


  1. import java.sql.CallableStatement;

  2. ...

  3. //

  4. // Prepare a call to the stored procedure 'demoSp'

  5. // with two parameters

  6. //

  7. // Notice the use of JDBC-escape syntax ({call ...})

  8. //

  9. CallableStatement cStmt = conn.prepareCall("{call demoSp(?, ?)}");

  10. cStmt.setString(1, "abcdefg");


Connection.prepareCall()方法非常消耗资源,因为jdbc驱动通过元数据(metadata)的获取支持输出参数.出于执行效率的考虑,应该尽可能减少不必要的prepareCall调用,重用CallableStatement对象.

2.注册输出参数(如果有的话)

要得到输出参数的值(创建存储过程时设置的OUT和INOUT),JDBC要求这些参数必须要在数据库操作执行之前通过registerOutputPrameter()方法设置.


  1. import java.sql.Types;

  2. ...

  3. //

  4. // 下面给出了设置输出参数的几个方法

  5. //

  6. // 注册第二个参数为输出参数

  7. //

  8. cStmt.registerOutParameter(2);

  9. //

  10. // 注册第二个参数为输出参数,设定getObject得到的返回值的类型为整型

  11. //

  12. cStmt.registerOutParameter(2, Types.INTEGER);

  13. //

  14. // 注册名为"inOutParam"的参数为输出参数

  15. //

  16. cStmt.registerOutParameter("inOutParam");

  17. //

  18. // 注册名为"inOutParam"的参数为输出参数,设定getObject得到的返回值的类型为整型

  19. //

  20. cStmt.registerOutParameter("inOutParam", Types.INTEGER);


3.设置输入参数(如果有的话)
类似PreparedStatement的设置参数方法.


  1. //

  2. // 设置第一个参数值

  3. //

  4. cStmt.setString(1, "abcdefg");

  5. //

  6. // 根据名字设置参数值

  7. //

  8. cStmt.setString("inputParameter", "abcdefg");

  9. //

  10. // 根据索引值设置输入/输出参数

  11. //

  12. cStmt.setInt(2, 1);

  13. //

  14. // 根据参数名设置输入/输出参数

  15. //

  16. //

  17. cStmt.setInt("inOutParam", 1);

  18. ...



4.执行CallableStatement,获取结果集合或输出参数
尽管CallableStatement支持Statement接口的所有执行方法(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. //

  16. int outputValue = cStmt.getInt(1);

  17. outputValue = cStmt.getInt("inOutParam");


关于"MySQL中如何使用存储过程"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

参数 输出 过程 存储 方法 篇文章 结果 输入 接口 数据 更多 版本 类型 索引 参考 支持 不错 实用 伸缩性 内容 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 手磨咖啡 互联网科技名片 广州为想互联网科技有限公司 互联网佳科技有限公司 互联网金融公司科技 电子科技大学互联网 重庆科技学院互联网 衡水科技产业互联网平台 云创客互联网科技公司 互联网科技项目计划书材料类 成都铂石互联网科技做什么的 哈尔滨屹滨互联网科技有限公司 本届互联网博览会上的黑科技 工业互联网等科技实现智能化赋能 济南有互联网科技公司吗 互联网营销推广黑科技 神州科技互联网有限公司 世界互联网科技成果奖 平安好医生打造互联网科技医疗 颐高云石互联网科技 河南云网互联网络科技有限公司 互联网科技活动banner 互联网与科技金融数据 杭州互联网科技公司 电子科技大学互联网 南平创想时代互联网科技有限公司 高科技互联网套路 信承诺互联网科技有限公司 珠海东科互联网科技有限公司 互联网公司属于科技吗
0