`
java_lk
  • 浏览: 40115 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

MySQL中使用存储过程[转]

    博客分类:
  • jse
阅读更多
原文地址:http://www.javaresearch.org/article/33716.htm

使用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()

import java.sql.CallableStatement; 
... 
// 
// Prepare a call to the stored procedure 'demoSp' 
// with two parameters 
// 
// Notice the use of JDBC-escape syntax ({call ...}) 
// 
CallableStatement cStmt = conn.prepareCall("{call demoSp(?, ?)}"); 
cStmt.setString(1, "abcdefg"); 


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

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

要得到输出参数的值(创建存储过程时设置的OUT和INOUT),JDBC要求这些参数必须要在数据库操作执行之前通过registerOutputPrameter()方法设置.
import java.sql.Types; 
... 
// 
// 下面给出了设置输出参数的几个方法 
// 
// 注册第二个参数为输出参数 
// 
cStmt.registerOutParameter(2); 
// 
// 注册第二个参数为输出参数,设定getObject得到的返回值的类型为整型 
//  
cStmt.registerOutParameter(2, Types.INTEGER); 
// 
// 注册名为"inOutParam"的参数为输出参数 
// 
cStmt.registerOutParameter("inOutParam"); 
// 
// 注册名为"inOutParam"的参数为输出参数,设定getObject得到的返回值的类型为整型 
// 
cStmt.registerOutParameter("inOutParam", Types.INTEGER); 

3.设置输入参数(如果有的话)
类似PreparedStatement的设置参数方法.
// 设置第一个参数值 
// 
cStmt.setString(1, "abcdefg"); 
// 
// 根据名字设置参数值 
// 
cStmt.setString("inputParameter", "abcdefg"); 
// 
// 根据索引值设置输入/输出参数 
// 
cStmt.setInt(2, 1); 
// 
// 根据参数名设置输入/输出参数 
//  
// 
cStmt.setInt("inOutParam", 1); 
... 

4.执行CallableStatement,获取结果集合或输出参数
尽管CallableStatement支持Statement接口的所有执行方法(executeUpdate(),executeQuery()或execute()),最具伸缩性的方法是execute(),因为你不需要知道是否这个存储过程返回结果集合.
... 
boolean hadResults = cStmt.execute(); 
// 
// 处理返回的结果集合 
// 
while (hadResults) { 
ResultSet rs = cStmt.getResultSet(); 
//  
... 
hadResults = cStmt.getMoreResults(); 
} 
// 
// 获取输出参数,通过索引值或参数名 
// 
// 
int outputValue = cStmt.getInt(1);  
outputValue = cStmt.getInt("inOutParam");  

分享到:
评论

相关推荐

    mysql存储过程教程

    MySQL存储过程是数据库管理系统中的一种重要功能,它允许开发者预编译一系列SQL语句并封装成一个可重复使用的单元,从而提高数据处理的效率和代码的复用性。本教程将深入探讨MySQL存储过程的创建、调用以及相关概念...

    mysql中文手册+mysql命令大全+mysql存储过程

    最后,"mysql存储过程.pdf"专注于MySQL的存储过程。存储过程是预编译的SQL语句集合,可以提高数据库操作的性能,减少网络流量,并增强数据安全。在PDF文档中,你将学习如何定义、调用和管理存储过程,以及如何使用...

    MySQL存储过程的异常处理方法

    首先,我们注意到在创建存储过程`myProc`时,使用了`delimiter $$`来改变MySQL客户端的语句分隔符,这是为了在存储过程中使用多个分号(;)而不会导致命令提前结束。存储过程的定义如下: ```sql CREATE PROCEDURE ...

    Java实现调用MySQL存储过程详解

    总的来说,Java通过JDBC调用MySQL存储过程涉及到连接数据库、创建`CallableStatement`、执行存储过程和处理结果。这使得开发者能够在Java应用中灵活地利用数据库提供的强大功能,实现更高效的数据处理。

    玩转MySQL存储过程

    ### 玩转MySQL存储过程 #### 一、存储过程简介及优势 存储过程是一种预编译的SQL语句集合,存储在数据库中,通过指定名称及其参数来调用执行。这种特性使得存储过程能够在执行时更加高效地完成特定任务。 **主要...

    mysql经典教程+mysql存储过程讲解

    在存储过程中,还可以使用条件语句(如IF-ELSE)和循环结构(如WHILE或LOOP),使得处理逻辑更加灵活。 接下来,我们讨论触发器。触发器是一种特殊的存储过程,它在特定的数据库事件(如INSERT、UPDATE或DELETE)...

    MySQL存储过程学习

    MySQL存储过程是数据库管理系统中的一种重要功能,它允许开发者预编译一系列的SQL语句,形成一个可重复使用的代码块,以提高数据处理的效率和应用程序的性能。在这个"MySQL存储过程学习"的主题中,我们将深入探讨...

    MySql 分页存储过程以及代码调用

    在这个存储过程中,我们传入了页码(page)、每页大小(pageSize)两个参数,并返回总行数(totalRows)。先计算出起始行号(rowCount),然后执行实际的分页查询。 调用这个存储过程可以使用以下代码: ```sql ...

    MySQL实验报告5(存储过程与函数)(1)(1).pdf

    在报告中,update_student_borthyear存储过程中使用了游标来遍历student表中的sage字段。首先定义了游标cur,然后使用“open cur”打开游标,并通过“fetch cur into s_age”获取当前行的sage值。之后,使用“update...

    MySQL存储过程完整版使用代码示例

    资源包中囊括了MySQL数据库中的存储过程的...该资源下所有内容都是本人的日常软件开发经验总结,对于初学者使用MySQL存储过程的程序员具有重要参考价值,问大家要10分是不过分的,用过就知道了,欢迎大家下载参考及使用

    mysql5.0官方存储过程翻译

    5. **局部变量**:在存储过程中,可以声明和使用局部变量,它们只在当前会话的存储过程内部有效。如: ```sql CREATE PROCEDURE useLocalVar() BEGIN DECLARE localVar INT; SET localVar = 10; SELECT ...

    c++实现调mysql存储过程

    c++实现调mysql存储过程,实现存储过程的出参入参,可以支持查询多数据返回,还有存储过程的复杂数据的增删改等

    mysql存储过程调试工具

    在存储过程中,变量的值可能随着流程的推进而变化,理解这些变化对于找出潜在问题至关重要。"Debugger for MySQL"支持实时查看和跟踪变量值,帮助开发者追踪数据流,定位错误源头。 此外,该工具可能还具备其他辅助...

    Mysql存储过程常用语句模板

    Mysql存储过程常用语句模板(含变量,if,三种循环等等) Mysql存储过程常用语句模板(含变量,if,三种循环等等) Mysql存储过程常用语句模板(含变量,if,三种循环等等) Mysql存储过程常用语句模板(含变量,if,三...

    mysql存储过程——用于数据库的备份与还原

    5. **错误处理和日志记录**:在存储过程中,应当包含适当的错误处理机制,如`BEGIN...TRY...END TRY...BEGIN CATCH...END CATCH`块,以及日志记录,以便跟踪备份过程的状态和可能出现的问题。 6. **还原数据**:当...

    MySQL存储过程编程.pdf

    MySQL 存储过程编程是指在 MySQL 数据库中使用存储过程来实现业务逻辑的编程技术。存储过程是一种可以在数据库中存储和执行的程序单元,它可以实现复杂的业务逻辑和数据处理操作。 在 MySQL 5.0 中,存储过程的...

    MySQL数据库存储过程

    通过阅读这份教程,读者可以学习如何创建、修改、删除存储过程,理解如何在存储过程中使用变量、游标、事务控制,以及如何优化存储过程的性能。 存储过程的使用有助于数据库的安全性,因为它可以限制对数据的直接...

    MySQL实现创建存储过程并循环添加记录的方法

    最后,`COMMIT`语句用于提交在存储过程中执行的所有操作,确保数据被持久化到数据库。 调用存储过程非常简单,只需要使用`CALL`语句,如下所示: ```sql CALL myproc(); ``` 这将执行存储过程`myproc`中的所有...

    mysql 流水号 存储过程 附表结构

    2. **事务处理**:在存储过程中使用`BEGIN`和`END`来包裹事务,以确保在并发环境中的一致性。可以使用`START TRANSACTION`开始一个事务,`COMMIT`提交事务,如果需要回滚则使用`ROLLBACK`。 3. **获取流水号**:...

Global site tag (gtag.js) - Google Analytics