数据库存储过程与Java调用

数据库存储过程

1.概述
一般的SQL语句需要先编译后执行,而存储过程是一组为了完成特定功能的SQL语句,编译好了过后存放在数据库中,用户可以通过给定所需要的参数去调用它。
2.优点
(1).增强SQL语言的功能和灵活性:存储过程可以用控制语句编写,有很强的灵活性,可以完成复杂的判断和较复杂的运算。

(2).组件式编程:存储过程被创建后,可以在程序中被多次调用。而且可以随时对存储过程进行修改,对应用程序源代码毫无影响。

(3).较快的执行速度:存储过程是预编译的。在首次运行一个存储过程时查询,优化器对其进行分析优化,并且给出最终被存储在系统表中的执行计划。而批处理的Transaction-SQL语句在每次运行时都要进行编译和优化,速度相对要慢一些。

(4).减少网络流量:在调用存储过程时,网络中传送的只是该调用语句,从而大大减少网络流量并降低了网络负载。

(5).作为一种安全机制来充分利用:通过对执行某一存储过程的权限进行限制,能够实现对相应的数据的访问权限的限制,避免了非授权用户对数据的访问,保证了数据的安全。

3.创建方法(SQL Server)

CREATE PROC [ EDURE ] procedure_name [ ; number ]
    [ { @parameter data_type }
        [ VARYING ] [ = default ] [ OUTPUT ]
    ] [ ,...n ]
 [ WITH
     { RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION } ]
 [ FOR REPLICATION ]
AS 
 [ begin ]
    T-SQL 语句
 [ end ]
  • 无参数无返回值有结果集
create procedure p1
as
begin 
	select * from student   #sql
end

go

execute p1

数据库存储过程与Java调用_第1张图片

  • 有参数有输出参数有返回值
create procedure p40
@sno char(8) ,
@out char(8) output
as
begin 
	 set @out=@sno
	 select * from student where SNO=@sno
	 return 20
end

go

declare @a char(8)
declare @b char(8)
execute @a=p40 '20000013',@b output
select @a,@b

4.Java调用
jdbc 的CallableStatement类调用存储过程
CallableStatement proc = conn.prepareCall("{ call procedureName(?,?) }");#构造

proc.setString(int parameterIndex,String x)#设置参数 注意参数类型对应。第一个参数为存储过程参数下标或者参数名字,第二个参数为存储过程参数的值

proc.execute();#执行存储过程 返回true 成功

proc.executeQuery()#执行存储过程并返回结果集

proc.getString(int parameterIndex or String parameterName);#拿到存储过程执行后的返回值参数为返回值下标或者返回值的名字。

proc.registerOutParameter(parameterIndex, sqlType);#拿到存储过程执行后的返回参数。第一个参数可以是存储过程返回参数的下标或者名字,第二个参数可以是sql类型或者Types.type

5.总结
(1)可以把存储过程看成一个编译好了的函数,这个函数也有参数,也有返回值。比函数多的就是有结果集、返回参数。
(2)定义一个同类型的参数并用存储过程的调用赋值可以拿到返回值。

declare @a [type]
execute @a=procedure [arg]

(3)定义一个参数,并作为参数传入存储过程的调用可以得到返回参数

declare @b [type]
execute p40 [arg...],@b output

你可能感兴趣的:(数据库)