相关链接: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();

 在数据库中新建存储过程:

         Java数据库连接--JDBC调用存储过程,事务管理和高级应用    

注意:创建的存储过程名称不要加"()",不然在调用存储过程会出错。

代码示例:

 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 }
ProduceDao.java

相关文章:

  • 2022-12-23
  • 2021-08-06
  • 2022-12-23
  • 2022-12-23
  • 2021-08-22
  • 2021-07-17
  • 2021-12-02
  • 2022-12-23
猜你喜欢
  • 2021-08-25
  • 2022-12-23
  • 2022-03-08
  • 2022-01-17
  • 2022-02-05
相关资源
相似解决方案