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
分享到:
相关推荐
对于 `P_EMP_SELECT` 存储过程,我们使用 `CallableStatementCallback` 对象调用存储过程,并将结果集处理到 `List` 集合中。 对于 `P_EMP_ADD` 存储过程,我们使用 `CallableStatementCallback` 对象调用存储过程...
使用Spring的JdbcTemplate调用Oracle的存储过程
Spring JdbcTemplate提供了一个面向对象的接口,用于执行SQL查询、更新和存储过程,避免了直接与JDBC API打交道的繁琐工作。它通过异常处理、事务管理以及结果集的自动处理,简化了数据库访问。基于注解的Spring ...
SpringJdbcTemplate是一个模板类,它提供了大量的方法来执行SQL查询、更新、存储过程等操作。这些方法会自动处理JDBC相关的资源关闭、异常转换等细节,使得代码更加整洁和健壮。 2. **数据库自适应** Spring...
Spring的JdbcTemplate是Spring框架中用于简化数据库操作的工具类,它是基于JDBC但又抽象出了一层,避免了直接与数据库驱动API交互,从而提高了代码的可读性和可维护性。本文将深入探讨Spring JdbcTemplate的常用方法...
`JdbcTemplate`的核心功能包括:执行SQL查询、更新、调用存储过程等,同时提供了一套统一的异常处理机制。它通过模板方法模式设计,允许我们在不丢失灵活性的情况下,保持代码的整洁和可读性。 在Spring应用中,`...
此外,JdbcTemplate还提供了其他高级功能,如批量操作、分页查询、存储过程调用等。同时,它也支持PreparedStatement,可以防止SQL注入攻击。对于性能要求较高的互联网应用,JdbcTemplate的这些特性使其成为理想的...
博客中的讲解可能还包括了更多关于JDBCTemplate的高级用法,如批处理、存储过程调用、复杂查询等。在实际项目中,通过结合Spring JDBCTemplate,开发者可以编写出更加优雅、可维护的数据库访问代码,同时充分利用...
结合Spring和Hibernate,你可以在Spring的Service层使用Hibernate的Session来调用存储过程,或者在Repository层通过JdbcTemplate或NamedParameterJdbcTemplate进行调用。具体选择哪种方式取决于你的项目结构和需求。...
- `call`:用于执行存储过程调用。 通过这些方法,开发者可以轻松地进行数据库操作,无需关注底层的资源管理和异常处理,从而提高了开发效率和代码质量。 总之,Spring-JdbcTemplate通过其简洁的API和强大的功能,...
Spring JDBC通过JdbcTemplate或NamedParameterJdbcTemplate提供了一种声明式的方式,可以方便地调用存储过程。 存储过程是预编译的SQL代码集合,可以在数据库中预先定义并存储,然后通过调用其名称来执行。它们通常...
3. **调用`JdbcTemplate`**:使用`JdbcTemplate`的`callProcedure()`或`execute()`方法执行存储过程,传入`SplitPageResultSetExtractor`实例作为参数。 4. **处理结果**:`ResultSetExtractor`会在内部维护当前页...
在本项目中,"spring-springMvc-jdbctemplate.rar" 是一个包含了使用Spring框架、Spring MVC和JdbcTemplate实现的Web应用示例。这个压缩包可能包含了一系列的配置文件、源代码和数据库脚本,旨在展示如何整合这些...
SpringMVC是一个强大的Java web应用程序开发框架,它简化了在基于Spring的应用程序中构建MVC(Model-View-Controller)架构的过程。JdbcTemplate是Spring框架的一部分,专门用于简化数据库操作,提供了一种模板方法...
3. **使用`jdbcTemplate`调用存储过程**:通过Spring框架提供的`jdbcTemplate`来执行存储过程。`execute()`方法接收两个参数: - `procedure`:存储过程的调用字符串。 - `new CallableStatementCallback()`:这是...
在测试方法中,使用Spring提供的JdbcTemplate或NamedParameterJdbcTemplate调用存储过程,然后使用断言(如assertEquals)来验证预期的结果。 总结来说,测试Spring中的存储过程涉及使用Spring的数据访问抽象,如...
JdbcTemplate是一个模板类,它封装了常见的JDBC操作,如执行SQL查询、更新和存储过程,避免了手动管理连接、预编译语句和结果集解析等繁琐工作。这大大简化了数据库操作,并减少了代码中的错误。 在Spring4中,事务...