相关链接:Jdbc调用存储过程
1、存储过程的介绍
我们常用的操作数据库语言SQL语句在执行的时候要先进行编译,然后执行,而存储过程是在大型数据库系统中,一组为了完成特定功能的SQL语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过制定存储过程的名字并给出参数(如果该存储过程带有参数) 来执行它。存储过程是数据库中 的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程。
一个存储过程是一个可编程的函数,它在数据库中创建并保存。它可以有SQL语句和一些特殊的控制结构组成。当希望在不同的应用程序或者平台上执行相同函数,或者封装特定功能时,存储过程非常有用。数据库中的存储过程可以看做是对编程中面向对象方法的模拟。它允许控制数据的访问方式。
存储过程有以下优点:
(1).存储过程增强了SQL语言的功能和灵活性。存储过程可以用流控制语句编写,有很强的灵活性,可以完成复杂的判断和较复杂的运算。
(2).存储过程允许标准组件是编程。存储过程被创建后,可以在程序中被多次调用,而不必重新编写该存储过程的SQL语句。而且数据库
专业人员可以随时对存储过程进行修改,对应用程序源代码毫无影响。
(3).存储过程能实现较快的执行速度。如果某一操作包含大量的Transaction-SQL代码或分别被多次执行,那么存储过程要比批处理的执行速度快很多。
因为存储过程是预编译的。在首次运行一个存储过程时查询,优化器对其进行分析优化,并且给出最终被存储在系统表中的执行计划。而批处理的Transaction-SQL
语句在每次运行时都要进行编译和优化,速度相对要慢一些。
(4).存储过程能过减少网络流量。针对同一个数据库对象的操作(如查询、修改),如果这一操作所涉及的Transaction-SQL语句被组织程存储过程,
那么当在客户计算机上调用该存储过程时,网络中传送的只是该调用语句,从而大大增加了网络流量并降低了网络负载。
(5).存储过程可被作为一种安全机制来充分利用。系统管理员通过执行某一存储过程的权限进行限制,能够实现对相应的数据的访问权限的限制,避免
了非授权用户对数据的访问,保证了数据的安全。
简单说,好处主要:
1、由于数据执行动作时,先编译后执行,然而存储过程是一个编译过的代码块,所以执行效率比T-SQL高。
2、一个存储过程在程序中交互可以替代大队的T-SQL语句,所以也能降低网络的通信量,提高通信效率。
3、通过存储过程能够使没有权限的用户在控制之下间接存取数据库,保证数据安全。
2、Jdbc调用无参数存储过程
存储过程代码: CREATE PROCEDURE imooc_db.sp_select_nofilter() BEGIN select * from imooc_goddess; END; 调用代码: Connection conn=DBUtil.getConnection(); CallableStatement c=conn.prepareCall("call sp_select_nofilter()"); c.execute(); ResultSet rs=c.getResultSet();
在数据库中新建存储过程:
注意:创建的存储过程名称不要加"()",不然在调用存储过程会出错。
代码示例:
1 package produceDao; 2 3 import java.sql.CallableStatement; 4 import java.sql.Connection; 5 import java.sql.ResultSet; 6 import java.sql.SQLException; 7 8 import sql.Dao.DBUtil; 9 10 public class ProduceDAO { 11 public void select_nofilter() throws SQLException{ 12 //1、获得连接 13 Connection connection=DBUtil.getConnection(); 14 //2、获得CallableStatement 15 CallableStatement cs=connection.prepareCall("call sp_select_nofilter()"); 16 //3、执行存储过程 17 cs.execute(); 18 //4、处理返回结果:结果集,出参 19 ResultSet rs=cs.getResultSet(); 20 //遍历结果集 21 while (rs.next()){ 22 System.out.println(rs.getString("user_name")+":"+rs.getString("email")); 23 } 24 } 25 }