`
wojoe123
  • 浏览: 2794 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Spring的JdbcTemplate调用存储过程

阅读更多
Spring的SimpleJdbcTemplate将存储过程的调用进行了良好的封装,下面列出使用JdbcTemplate调用Oracle存储过程的三种情况:
一、无返回值的存储过程调用

1、存储过程代码:

    create or replace procedure sp_insert_table(param1 in varchar2,param2 in varchar2) as    
       begin   
           insert into table MyTable (id,name) values ('param1 ','param2');   
       end sp_insert_table;   

2、JdbcTemplate调用该存储过程代码:
    package com.dragon.test;    
    import org.springframework.jdbc.core.JdbcTemplate;    
    public class JdbcTemplateTest {    
      private JdbcTemplate jdbcTemplate;    
      public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {    
      this.jdbcTemplate = jdbcTemplate;    
      }    
      public void test(){    
         this.jdbcTemplate.execute("call sp_insert_table('100001')");    
      }    
    }    


二、有返回值的存储过程(非结果集)

1、存储过程代码:

    create or replace procedure sp_select_table (param1 in varchar2,param2 out varchar2) as    
     begin select into param2 from MyTable where ID = param1 ;  
    end sp_insert_table ;  
2、JdbcTemplate调用该存储过程代码:

    public void test() {  
      String param2Value = (String) jdbcTemplate.execute(  
         new CallableStatementCreator() {  
            public CallableStatement createCallableStatement(Connection con) throws SQLException {  
               String storedProc = "{call sp_select_table (?,?)}";// 调用的sql  
               CallableStatement cs = con.prepareCall(storedProc);  
               cs.setString(1, "p1");// 设置输入参数的值  
               cs.registerOutParameter(2,OracleTypes.Varchar);// 注册输出参数的类型  
               return cs;  
            }  
         }, new CallableStatementCallback() {  
             public Object doInCallableStatement(CallableStatement cs) throws SQLException, DataAccessException {  
               cs.execute();  
               return cs.getString(2);// 获取输出参数的值  
         }  
      });  
    }  

三、有返回值的存储过程(结果集)

1、存储过程代码:先创建程序包,因为Oracle存储过程所有返回值都是通过out参数返回的,列表同样也不例外,但由于是集合,所以不能用一般的参数,必须要用package:

    create or replace package mypackage as 
        type my_cursor is ref cursor; 
        end mypackage; 
2、存储过程代码:可以看到,列表是通过把游标作为一个out参数来返回的。 
    create or replace procedure sp_list_table(param1 in varchar2,param2 out mypackage.my_cursor) is 
        begin 
        open my_cursor for select * from myTable; 
        end sp_list_table; 
3、JdbcTemplate调用该存储过程代码:

    public void test() {  
      List resultList = (List) jdbcTemplate.execute(  
         new CallableStatementCreator() {  
            public CallableStatement createCallableStatement(Connection con) throws SQLException {  
               String storedProc = "{call sp_list_table(?,?)}";// 调用的sql  
               CallableStatement cs = con.prepareCall(storedProc);  
               cs.setString(1, "p1");// 设置输入参数的值  
               cs.registerOutParameter(2, OracleTypes.CURSOR);// 注册输出参数的类型  
               return cs;  
            }  
         }, new CallableStatementCallback() {  
            public Object doInCallableStatement(CallableStatement cs) throws SQLException,DataAccessException {  
               List resultsMap = new ArrayList();  
               cs.execute();  
               ResultSet rs = (ResultSet) cs.getObject(2);// 获取游标一行的值  
               while (rs.next()) {// 转换每行的返回值到Map中  
                  Map rowMap = new HashMap();  
                  rowMap.put("id", rs.getString("id"));  
                  rowMap.put("name", rs.getString("name"));  
                  resultsMap.add(rowMap);  
               }  
               rs.close();  
               return resultsMap;  
            }  
      });  
      for (int i = 0; i < resultList.size(); i++) {  
         Map rowMap = (Map) resultList.get(i);  
         String id = rowMap.get("id").toString();  
         String name = rowMap.get("name").toString();  
         System.out.println("id=" + id + ";name=" + name);  
      }  
    }  

作者:伫望碧落 出处:http://blog.csdn.net/cl05300629
分享到:
评论

相关推荐

    Spring JdbcTemplate调用Oracle存储过程实现CRUD

    对于 `P_EMP_SELECT` 存储过程,我们使用 `CallableStatementCallback` 对象调用存储过程,并将结果集处理到 `List` 集合中。 对于 `P_EMP_ADD` 存储过程,我们使用 `CallableStatementCallback` 对象调用存储过程...

    使用Spring的JdbcTemplate调用Oracle的存储过程

    使用Spring的JdbcTemplate调用Oracle的存储过程

    基于注解的Spring JdbcTemplate

    Spring JdbcTemplate提供了一个面向对象的接口,用于执行SQL查询、更新和存储过程,避免了直接与JDBC API打交道的繁琐工作。它通过异常处理、事务管理以及结果集的自动处理,简化了数据库访问。基于注解的Spring ...

    SpringJdbcTemplate封装工具类

    SpringJdbcTemplate是一个模板类,它提供了大量的方法来执行SQL查询、更新、存储过程等操作。这些方法会自动处理JDBC相关的资源关闭、异常转换等细节,使得代码更加整洁和健壮。 2. **数据库自适应** Spring...

    Spring JdbcTemplate 常用方法整理

    Spring的JdbcTemplate是Spring框架中用于简化数据库操作的工具类,它是基于JDBC但又抽象出了一层,避免了直接与数据库驱动API交互,从而提高了代码的可读性和可维护性。本文将深入探讨Spring JdbcTemplate的常用方法...

    spring jdbcTemplate 注入到servlet

    `JdbcTemplate`的核心功能包括:执行SQL查询、更新、调用存储过程等,同时提供了一套统一的异常处理机制。它通过模板方法模式设计,允许我们在不丢失灵活性的情况下,保持代码的整洁和可读性。 在Spring应用中,`...

    spring jdbctemplate实例

    此外,JdbcTemplate还提供了其他高级功能,如批量操作、分页查询、存储过程调用等。同时,它也支持PreparedStatement,可以防止SQL注入攻击。对于性能要求较高的互联网应用,JdbcTemplate的这些特性使其成为理想的...

    spring jdbcTemplet demo

    博客中的讲解可能还包括了更多关于JDBCTemplate的高级用法,如批处理、存储过程调用、复杂查询等。在实际项目中,通过结合Spring JDBCTemplate,开发者可以编写出更加优雅、可维护的数据库访问代码,同时充分利用...

    spring hibernate执行存储过程的例子

    结合Spring和Hibernate,你可以在Spring的Service层使用Hibernate的Session来调用存储过程,或者在Repository层通过JdbcTemplate或NamedParameterJdbcTemplate进行调用。具体选择哪种方式取决于你的项目结构和需求。...

    Spring-JdbcTemplate

    - `call`:用于执行存储过程调用。 通过这些方法,开发者可以轻松地进行数据库操作,无需关注底层的资源管理和异常处理,从而提高了开发效率和代码质量。 总之,Spring-JdbcTemplate通过其简洁的API和强大的功能,...

    Spring+Jdbc scott用户的调用存储过程

    Spring JDBC通过JdbcTemplate或NamedParameterJdbcTemplate提供了一种声明式的方式,可以方便地调用存储过程。 存储过程是预编译的SQL代码集合,可以在数据库中预先定义并存储,然后通过调用其名称来执行。它们通常...

    jdbcTemplate分页彻底解决,使用游标滚动

    3. **调用`JdbcTemplate`**:使用`JdbcTemplate`的`callProcedure()`或`execute()`方法执行存储过程,传入`SplitPageResultSetExtractor`实例作为参数。 4. **处理结果**:`ResultSetExtractor`会在内部维护当前页...

    spring-springMvc-jdbctemplate.rar

    在本项目中,"spring-springMvc-jdbctemplate.rar" 是一个包含了使用Spring框架、Spring MVC和JdbcTemplate实现的Web应用示例。这个压缩包可能包含了一系列的配置文件、源代码和数据库脚本,旨在展示如何整合这些...

    springmvc JdbcTemplate demo

    SpringMVC是一个强大的Java web应用程序开发框架,它简化了在基于Spring的应用程序中构建MVC(Model-View-Controller)架构的过程。JdbcTemplate是Spring框架的一部分,专门用于简化数据库操作,提供了一种模板方法...

    调用存储过程.txt

    3. **使用`jdbcTemplate`调用存储过程**:通过Spring框架提供的`jdbcTemplate`来执行存储过程。`execute()`方法接收两个参数: - `procedure`:存储过程的调用字符串。 - `new CallableStatementCallback()`:这是...

    测试spring的存储过程

    在测试方法中,使用Spring提供的JdbcTemplate或NamedParameterJdbcTemplate调用存储过程,然后使用断言(如assertEquals)来验证预期的结果。 总结来说,测试Spring中的存储过程涉及使用Spring的数据访问抽象,如...

    Spring4--3.jdbcTemplate事务

    JdbcTemplate是一个模板类,它封装了常见的JDBC操作,如执行SQL查询、更新和存储过程,避免了手动管理连接、预编译语句和结果集解析等繁琐工作。这大大简化了数据库操作,并减少了代码中的错误。 在Spring4中,事务...

Global site tag (gtag.js) - Google Analytics