【insigma】存储过程

本文介绍了数据库存储过程的概念及其优缺点,并通过MySQL示例展示了如何创建和调用存储过程,强调了其在提升执行效率和简化复杂操作方面的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

存储过程概念:
数据库存储过程的实质就是部署在数据库端的一组定义代码以及SQL。将常用的或很复杂的工作,预先用SQL语句写好并用一个指定的名称存储起来,
那么以后要叫数据库提供与已定义好的存储过程的功能相同的服务时,只需调用execute,即可自动完成命令。

优点:
       1.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。
  2.当对数据库进行复杂操作时(如对多个表进行Update,Insert,Query,Delete时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。
  3.存储过程可以重复使用,可减少数据库开发人员的工作量
  4.安全性高,可设定只有某些用户才具有对指定存储过程的使用权
缺点
  1:调试麻烦(oralce中使用 PL/SQL Developer 调试很方便!弥补这个缺点)。
  2:移植问题,数据库端代码当然是与数据库相关的。但是如果是做工程型项目,基本不存在移植问题。
  3:重新编译问题,因为后端代码是运行前编译的,如果带有引用关系的对象发生改变时,受影响的存储过程、包将需要重新编译(不过也可以设置成运行时刻自动编译)。
  4: 如果在一个程序系统中大量的使用存储过程,到程序交付使用的时候随着用户需求的增加会导致数据结构的变化,接着就是系统的相关问题了,
最后如果用户想维护该系统可以说是很难很难、而且代价是空前的,维护起来更麻烦。

CallableStatement
mysql创建存储过程例子:

drop procedure if exists insertCategory;
create procedure insertCategory ( in id int, in categoryName varchar(20), in directionId int, out categoryNum int)
begin
       start transaction;
        insert into category values(id, categoryName, directionId);
        select count(*) into categoryNum from category;
       commit;
end

call insertCategory(5, '其他福利', 1, @abc);
select @abc; 


1,statement
	Statement stmt = con.createStatement();
	result = stmt.executeQuery("select * from dict where dictKind = '01'");
		while(result.next()){
			String dictKind = result.getString("dictKind");
			String dictName = result.getString("dictName");
			String dictKey = result.getString("dictKey");
			String dictInfo = result.getString("dictInfo");
			
			System.out.println(dictKind + "-" + dictName + "-" + dictKey + "-" + dictInfo);
			}

2,preparedStatement


3,存储过程的前台调用callalbeStatement

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值