网站建设资讯

NEWS

网站建设资讯

MySQL中如何使用存储过程

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

十多年的前郭网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。成都营销网站建设的优势是能够根据用户设备显示端的尺寸不同,自动调整前郭建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。创新互联从事“前郭网站设计”,“前郭网站推广”以来,每个客户项目都认真落实执行。

使用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. importjava.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. CallableStatementcStmt = conn.prepareCall("{call demoSp(?, ?)}");

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


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

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

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

  1. importjava.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. booleanhadResults = 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. intoutputValue = cStmt.getInt(1);

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

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


分享文章:MySQL中如何使用存储过程
浏览路径:http://njwzjz.com/article/pcjjhs.html