JDBC之CallableStatement 的使用

一、使用CallableStatement(可调用语句)的优缺点:
1.优点:语法错误可以在编译时找出来,而非在运行期间;数据库存储过程的运行可能比常规的SQL查询快得多;程序员只需知道输入和输出参数,不需了解表的结构。另外,由于数据库语言能够访问数据库本地的一下儿功能(序列,触发器,多重游标),因此用它来编写存储过程可能要比使用Java编程语言要简易一些。
2.缺点:存储过程的商业逻辑在数据库服务器上运行,而非客户机或Web服务器。而行业的发展趋势是尽可能多地将商业逻辑移出数据库,将它们放在 JavaBean组件(或者在大型的系统中,EnterPrise JavaBean组件)中,在Web构架上采用这种方式的主要动机是:数据库访问和网络I/O常常是性能的瓶颈。
二、使用CallableStatement在JAVA中调用数据库存储过程:
1.定义对数据库过程的调用
A.无参数过程:{ call procedure_name}
B. 仅有输入参数的过程:{call procedure_name(?,?...)}
C.有一个输出参数的过程:{? Call procedure_name} 
D.既有输入参数又有输出参数的过程{?=call procedure_name(?,?...)}

在过程的4种形式中要注意过程可能返回多个输出参数,并且参数的索引值从输出参数开始。因此前面最后例子中,第一个输入参数的索引值是2而不是1。

2.为过程准备

CallableStatement String procedure = “{ ? = call procedure_name(?,?) }”;   //函数语法格式

CallableStatement statement = connection.prepareCall(procedure);

补充:

CallableStatement 接口执行存储过程和函数的语法格式。

存储过程:{call<procedure-name>[(<arg1>,<arg2>, ...)]}

函数:{?= call <procedure-name>[(<arg1>,<arg2>,...)]}


3.提供输入参数的值在执行存储过程之前,我们需要调用与所要设置的项以及参数的类型相对应的setXxx,替换标记出来的输入参数

Statement.setString(2,”name”);


4.注册输出参数的类型我们必须使用registerOutParameter注册每个输出参数的JDBC类型Statement.registerOutParameter(n,type);


5.执行这个存储过程

Statement.execute();


6.访问返回的输出参数可以通过调用getXxx访问每个对应的输出参数例如:
Connection connection = DriverManager.getConnection(url,username,password);
String procedure = “{ ? = call myProc(?,?)}”;
CallableStatement statement = connection.prepareCall(procedure); statement.setString(2,×××);
statement.setFloat(3,×××);
statement.registerOutParameter(1,Types.INTEGER);
statement.execute();

int row = statement.getInt(1);


二、存储过程创建

1. 创建一个查询adminusers所有记录的存储过程——--Proc;
DELIMITER //
CREATE PROCEDURE Proc() 
BEGIN
  SELECT * FROM ADMINUSERS;
END//
DELIMITER ;


带有输出参数的存储过程(存储过程参数列表里的参数名尽量不要和数据库中表的字段名一样,否则有可能出错)
DELIMITER //
CREATE PROCEDURE Test_CountProc(OUT param1 INT)
BEGIN
SELECT    COUNT(*) INTO  param1 FROM t3;
END//
DELIMITER ;


说明:说明:“DELIMITER //”语句的作用是将MYSQL的结束符设置为//,因为MYSQL默认的语句结束符为分号;,为了避免与存储过程中SQL语句结束符相冲突,需要使用DELIMITER 改变存储过程的结束符,并以“END//”结束存储过程。

2.执行Proc() 存储过程(调用存储过程的方法很简单,只需要使用call命令即可,后面跟要调用存储过程的名称及输入的变量列表)
CALL Proc();

CALL Test_CountProc(@param1);
select @param1;


3. 修改和删除存储过程:可以用ALTER的语法去修改存储过程的主要特征和参数,要修改其存储过程的主体部分的话,必须要先删除然后再重建(DROP PROCEDURE IF EXISTS Proc ;)



第一部分转载于:http://blog.csdn.net/imust_can/article/details/6989954

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值