`
war_martin
  • 浏览: 116183 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

spring jdbc模板调用存储过程

    博客分类:
  • java
 
阅读更多

Spring的SimpleJdbcTemplate将存储过程的调用进行了良好的封装,但可惜只能用于jdk1.5的环境,无法再jdk1.4环境下使用,而JdbcTemplate则完全适用于jdk1.4下的环境,下面列出使用JdbcTemplate调用Oracle存储过程的一些方法:

一) 无返回值的存储过程调用
存储过程:  
CREATE OR REPLACE PROCEDURE TESTPRO(PARAM1 IN VARCHAR2,PARAM2 IN VARCHAR2) AS
BEGIN
    INSERT INTO TESTTABLE (ID,NAME) VALUES (PARAM1, PARAM2);
END TESTPRO;

Java代码:   
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 testpro('p1','p2')");
  }
}
注:存储过程TESTPRO中用到了表TESTTABLE(ID, NAME),需事先建好.

二)有返回值的存储过程(非结果集)   
存储过程:   
CREATE OR REPLACE PROCEDURE TESTPRO(PARAM1 IN VARCHAR2,PARAM2 OUT VARCHAR2) AS   
BEGIN    
    SELECT INTO PARAM2 FROM TESTTABLE WHERE ID= PARAM1;    
END TESTPRO;

Java代码:
public void test() {
  String param2Value = (String) jdbcTemplate.execute(
     new CallableStatementCreator() {
        public CallableStatement createCallableStatement(Connection con) throws SQLException {
           String storedProc = "{call testpro(?,?)}";// 调用的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);// 获取输出参数的值
     }
  });
}
注:cs.getString(2)中的数值2是存储过程中的out列对应的索引值(第一个参数索引为1,如此类推) 

三)有返回值的存储过程(结果集)     
因oracle存储过程所有返回值都是通过out参数返回的,列表同样也不例外,但由于是集合,所以不能用一般的参数,必须要用pagkage,分两部分:   
1.建一个程序包,如下:
CREATE OR REPLACE PACKAGE TESTPACKAGE AS
  TYPE TEST_CURSOR IS REF CURSOR;
END TESTPACKAGE;
2.建立存储过程,如下:
CREATE OR REPLACE PROCEDURE TESTPRO(PARAM1 IN VARCHAR2,test_cursor out TESTPACKAGE.TEST_CURSOR) IS
BEGIN
     OPEN test_cursor FOR SELECT * FROM TESTTABLE;
END TESTPRO;
可以看到,列表是通过把游标作为一个out参数来返回的。   

Java代码:
public void test() {
  List resultList = (List) jdbcTemplate.execute(
     new CallableStatementCreator() {
        public CallableStatement createCallableStatement(Connection con) throws SQLException {
           String storedProc = "{call testpro(?,?)}";// 调用的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);
  }
}
分享到:
评论

相关推荐

    Spring jdbcTemplate调用Oracle存储过程返回List集合

    Spring jdbcTemplate 调用 Oracle 存储过程...我们创建了一个简单的存储过程,用于查询员工信息,并使用 Spring jdbcTemplate 调用存储过程来获取结果集。这种方法可以帮助我们简化数据库操作,并提高应用程序的性能。

    SpringJDBC.rar_SpringJDBC_spring jdbc

    `SimpleJdbcInsert`和`SimpleJdbcCall`则分别用于简化插入操作和调用存储过程。 1. **JdbcTemplate使用**: - **连接管理**:Spring JDBC通过DataSource来管理数据库连接,DataSource是一个接口,实现了数据库连接...

    spring-jdbc jar包.rar

    1. **JdbcTemplate**:这是Spring JDBC的核心类,它通过模板方法模式将常见的JDBC操作进行了封装,如执行SQL查询、更新、调用存储过程等。开发者只需要关注SQL语句和参数,而无需处理连接创建、关闭、异常处理等繁琐...

    Spring JDBC应用实例讲解

    JdbcTemplate是Spring JDBC的基础,它提供了模板方法来处理常见的JDBC任务,如执行SQL查询、更新、存储过程等。使用JdbcTemplate可以避免手动管理连接、预编译语句、结果集处理等繁琐工作,从而降低出错的可能性。 ...

    SpringJDBC训练素材.zip

    此外,Spring JDBC还支持CallableStatement,用于调用数据库的存储过程。通过JdbcTemplate的call()方法,你可以传入CallableStatementCreator,然后执行存储过程并获取结果。 总之,Spring JDBC是一个强大且灵活的...

    Spring_jdbc模板相关jar包

    此外,Spring JDBC还提供了`SimpleJdbcInsert`和`SimpleJdbcCall`类,分别用于简化插入操作和调用存储过程。`SimpleJdbcInsert`允许你设置表名和列名,然后自动构建插入语句,而`SimpleJdbcCall`则可以方便地调用...

    spring对jdbc的支持jar包

    2. **SimpleJdbcInsert** 和 **SimpleJdbcCall**:这两个类分别简化了插入操作和调用存储过程的过程。SimpleJdbcInsert可以自动计算生成主键值,而SimpleJdbcCall则允许开发者方便地定义和执行数据库的存储过程。 3...

    Spring_jdbc模板相关jar包(连接文件版本:5.1.47)

    在Spring JDBC模板中,`JdbcTemplate`类是最常用的一个,它包含了一系列用于执行SQL查询、更新、调用存储过程的方法。比如,你可以使用`queryForList`来获取查询结果的列表,`update`来执行插入、更新或删除操作。...

    SpringJDBC.rar_jdbc spring_spring jd_spring jdbc_spring使用JDBC进行数

    2. **JdbcTemplate**:这是Spring JDBC最常用的工具类,提供了大量的模板方法,用于执行SQL查询、更新、调用存储过程等操作,大大减少了手动处理结果集和异常的情况。 3. **SimpleJdbcTemplate**:这是JdbcTemplate...

    Spring Jdbc的jar包

    此外,Spring JDBC的`JdbcOperations`接口扩展了`JdbcTemplate`,提供了一组通用的JDBC操作,包括执行SQL查询、调用存储过程等。`NamedParameterJdbcTemplate`则是另一个扩展,它支持命名参数的SQL查询,使得查询...

    Spring JDBC相关jar包:spring_jdbc_4.0.0.zip

    这是一个非常实用的工具类,它通过模板方法模式封装了JDBC的基本操作,如执行SQL查询、更新、存储过程等。`JdbcTemplate`提供了异常转换、参数绑定、结果集处理等功能,使得代码更加简洁且易于维护。 首先,让我们...

    SpringJDBC工程对应Jar包

    其次,Spring JDBC还引入了`SimpleJdbcInsert`和`SimpleJdbcCall`,分别用于简化插入操作和调用存储过程。`SimpleJdbcInsert`可以根据表结构自动生成INSERT语句,而`SimpleJdbcCall`则可以方便地调用数据库中的存储...

    Spring Data JDBC与JDBC的区别

    7. **CallableStatement**: 用于调用数据库存储过程。 8. **ResultSet**: 存储查询结果,包含多条记录,可以迭代遍历。 而Spring Data JDBC是Spring框架的一部分,它简化了数据库操作,提供了更高层次的抽象。相比...

    SpringMVC+Spring+SpringJDBC

    SpringMVC、Spring和SpringJDBC是Spring框架的三个重要组成部分,它们协同工作,提供了从用户接口到数据存储的完整解决方案。下面将详细介绍这三个组件及其整合方式。 **1. SpringMVC** SpringMVC(Model-View-...

    Springjdbc

    - **存储过程**: 可以方便地调用数据库中的存储过程,并处理其返回的结果集。 **5. 结果集处理** Spring JDBC提供了RowMapper和ResultSetExtractor接口,用于将数据库查询结果映射到Java对象。此外,还可以使用...

    Spring_JDBC模板笔记

    JdbcTemplate提供了多种方法来执行SQL语句,包括简单查询、更新、存储过程调用等。例如,以下是如何使用`queryForList`方法执行一个SELECT查询: ```java @Autowired private JdbcTemplate jdbcTemplate; public ...

    spring_integration_jdbc.rar_spring jdbc

    如果`JdbcTemplate`提供的方法不能满足需求,可以使用`SimpleJdbcCall`来执行存储过程,或者直接调用`SimpleJdbcInsert`来执行插入操作。 10. **SQL脚本执行** 在应用启动时,Spring JDBC可以加载SQL脚本文件,...

    Spring+JDBC实例

    3. **JdbcTemplate方法**:JdbcTemplate提供了一系列的方法来执行SQL,如`update()`用于执行更新语句,`queryForObject()`用于获取单个结果,`query()`用于获取多个结果,以及`call()`用于调用存储过程。 4. **结果...

    springJdbcDemo11_java_springjdbc_

    - **SimpleJdbcCall**: 用于调用存储过程。 - **RowMapper**: 定义了将数据库一行数据映射到Java对象的方法。 - **ResultSetExtractor**: 处理整个结果集并返回单个值或集合。 3. **Spring JDBC配置** 在Spring...

    spring中jdbc的操作

    此外,SimpleJdbcInsert、SimpleJdbcCall等工具类进一步简化了插入、存储过程调用等操作。 总之,Spring JDBC通过提供强大的模板类和工具类,降低了JDBC编程的复杂性,提高了代码的可维护性。在实际项目中,结合...

Global site tag (gtag.js) - Google Analytics