1.创建表
create table TEST_USERS ( USER_ID VARCHAR2(10) not null, NAME VARCHAR2(10) not null, PASSWORD VARCHAR2(20) not null )
2.创建存储过程
create or replace package display_users_package is type search_results is ref cursor; procedure display_users_proc(results_out out search_results, userId in test_users.user_id%type); end display_users_package; create or replace package body display_users_package is procedure display_users_proc(results_out out search_results, userId in test_users.user_id%type) is begin if userId is not null then open results_out for select * from test_users where user_id like userId || '%'; else open results_out for select * from test_users; end if; end display_users_proc; end display_users_package;
3. 完整实现代码:
import java.sql.CallableStatement; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.sql.DataSource; import oracle.jdbc.OracleTypes; import org.springframework.dao.DataAccessException; import org.springframework.jdbc.core.CallableStatementCallback; import org.springframework.jdbc.core.CallableStatementCreator; import org.springframework.jdbc.core.JdbcTemplate; import com.spring.stored.procedure.util.DataContextUtil; /** * @author Jane Jiao * */ public class SpringStoredProce { public List<Map> execute(String storedProc, String params){ List<Map> resultList = null; try{ final DataSource ds = DataContextUtil.getInstance().getDataSource(); final JdbcTemplate template = new JdbcTemplate(ds); resultList = (List<Map>)template.execute(new ProcCallableStatementCreator(storedProc, params), new ProcCallableStatementCallback()); }catch(DataAccessException e){ throw new RuntimeException("execute method error : DataAccessException " + e.getMessage()); } return resultList; } /** * Create a callable statement in this connection. */ private class ProcCallableStatementCreator implements CallableStatementCreator { private String storedProc; private String params; /** * Constructs a callable statement. * @param storedProc The stored procedure's name. * @param params Input parameters. * @param outResultCount count of output result set. */ public ProcCallableStatementCreator(String storedProc, String params) { this.params = params; this.storedProc = storedProc; } /** * Returns a callable statement * @param conn Connection to use to create statement * @return cs A callable statement */ public CallableStatement createCallableStatement(Connection conn) { StringBuffer storedProcName = new StringBuffer("call "); storedProcName.append(storedProc + "("); //set output parameters storedProcName.append("?"); storedProcName.append(", "); //set input parameters storedProcName.append("?"); storedProcName.append(")"); CallableStatement cs = null; try { // set the first parameter is OracleTyep.CURSOR for oracel stored procedure cs = conn.prepareCall(storedProcName.toString()); cs.registerOutParameter (1, OracleTypes.CURSOR); // set the sencond paramter cs.setObject(2, params); } catch (SQLException e) { throw new RuntimeException("createCallableStatement method Error : SQLException " + e.getMessage()); } return cs; } } /** * * The ProcCallableStatementCallback return a result object, * for example a collection of domain objects. * */ private class ProcCallableStatementCallback implements CallableStatementCallback { /** * Constructs a ProcCallableStatementCallback. */ public ProcCallableStatementCallback() { } /** * Returns a List(Map) collection. * @param cs object that can create a CallableStatement given a Connection * @return resultsList a result object returned by the action, or null */ public Object doInCallableStatement(CallableStatement cs){ List<Map> resultsMap = new ArrayList<Map>(); try { cs.execute(); ResultSet rs = (ResultSet) cs.getObject(1); while (rs.next()) { Map<String, String> rowMap = new HashMap<String, String>(); rowMap.put("userId", rs.getString("USER_ID")); rowMap.put("name", rs.getString("NAME")); rowMap.put("password", rs.getString("PASSWORD")); resultsMap.add(rowMap); } rs.close(); }catch(SQLException e) { throw new RuntimeException("doInCallableStatement method error : SQLException " + e.getMessage()); } return resultsMap; } } }
4. 测试代码,在这里使用了Junit4测试: import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import java.util.List; import java.util.Map; import org.junit.After; import org.junit.Before; import org.junit.Test; /** * @author Jane Jiao * */ public class SpringStoredProceTest { private SpringStoredProce springStoredProce; /** * @throws java.lang.Exception */ @Before public void setUp() throws Exception { springStoredProce = new SpringStoredProce(); } /** * @throws java.lang.Exception */ @After public void tearDown() throws Exception { springStoredProce = null; } /** * Test method for {@link com.hactl.listingframework.dao.SpringStoredProce#execute(java.lang.String, java.lang.String)}. */ @Test public void testExecute() { final String storedProcName = "display_users_package.display_users_proc"; final String param = "test"; List<Map> resultList = springStoredProce.execute(storedProcName, param); assertNotNull(resultList); assertTrue(resultList.size() > 0); for (int i = 0; i < resultList.size(); i++) { Map rowMap = resultList.get(i); final String userId = rowMap.get("userId").toString(); final String name = rowMap.get("name").toString(); final String password = rowMap.get("password").toString(); System.out.println("USER_ID=" + userId + "\t name=" + name + "\t password=" + password); } } }
5. 测试的输出结果:
USER_ID=test1 name=aa password=aa USER_ID=test2 name=bb password=bb USER_ID=test3 name=cc password=cc
您还没有登录,请您登录后再发表评论
使用 Spring JdbcTemplate 调用 Oracle 存储过程实现 CRUD 在本文中,我们将讨论如何使用 Spring JdbcTemplate 调用 Oracle 存储过程来实现 CRUD(Create、Read、Update、Delete)操作。我们将首先编写 Oracle 存储...
使用Spring的JdbcTemplate调用Oracle的存储过程
本文将深入探讨如何在Spring Boot项目中整合MyBatis,实现调用Oracle存储过程并处理游标返回的数据。 首先,我们需要在Spring Boot项目中引入相关的依赖。在`pom.xml`文件中添加Oracle JDBC驱动(ojdbc66-oracle...
能不能写个动态的业务,只输入存储过程名称,自动获取存储过程参数,并且参数的数据从前台传递过来...只根据输入不同的存储过程名称、参数内容,自动调用不同的存储过程。 已经使用在多个项目中 全开源项目 请放心下载
在Spring Boot应用中,调用Oracle数据库的存储过程有多种方式。本文主要介绍三种方法,包括使用`entityManagerFactory.unwrap(SessionFactory.class).openSession()`、直接使用`EntityManager`的`...
通过以上步骤,开发者可以在Spring和MyBatis环境中顺利地调用Oracle存储过程,实现复杂业务逻辑的处理。这不仅可以提高代码的可维护性,还能利用数据库的优势来优化性能。在进行这类操作时,一定要注意参数类型、...
Spring Boot 调用 Oracle 存储过程的两种方式及完整代码 在本文中,我们将为大家介绍 Spring Boot 调用 Oracle 存储过程的两种方式,并提供完整的代码示例。本文主要解决了在 Spring Boot 项目中调用 Oracle 存储...
"Mybatis调用Oracle存储过程传List参数解决方法" Mybatis是当前最流行的持久层框架之一,它提供了强大的数据访问和操作功能。但是,如何将List类型参数传递给Oracle存储过程,实现批量插入数据却是一个棘手的问题,...
Java调用Oracle存储过程是数据库操作中常见的任务,特别是在需要执行复杂业务逻辑或者批量处理数据时。本篇文章将详细介绍如何通过Java与Oracle数据库交互,调用存储过程,并提供几个简单的实例帮助新手理解。 首先...
总的来说,理解如何在Spring中正确地调用Oracle存储过程并传递数组参数是提高应用程序效率和数据库操作灵活性的重要技能。这涉及到了数据库设计、Java编程、Spring框架的使用以及对Oracle特定特性的掌握。通过上述...
本文将详细介绍如何在SSM项目中调用Oracle存储过程,这对于提升应用程序性能和简化复杂操作具有重要意义。 首先,让我们了解一下SSM框架。SSM是由Spring框架、SpringMVC和MyBatis三个组件组成的轻量级Java Web开发...
我们可以通过几种不同的方式调用Oracle存储过程。 使用 使用javax.persistence 。 我们在这种情况下使用了这种方法无论我们选择哪种方式,在使用spring-data时都应该设置一些关键方面/属性(尤其是当我们不让Spring...
执行Oracle存储过程主要涉及以下几个关键点: 1. 创建CallableStatement对象:使用Connection对象的`prepareCall()`方法创建CallableStatement实例,例如`CallableStatement cs = conn.prepareCall("{call procedure...
总之,使用Java调用Oracle存储过程进行数据库备份是一种常见的实践,它允许我们在应用程序中灵活地管理复杂的数据库操作,同时确保数据的安全性。结合适当的备份策略和工具,可以构建出高效可靠的数据库备份系统。
以下是一个Oracle数据库中的存储过程示例: ```sql CREATE OR REPLACE PROCEDURE pp (x IN NUMBER, y IN NUMBER, z OUT NUMBER) IS BEGIN SELECT x + y INTO z FROM dual; END pp; ``` 这个存储过程接收两个输入...
MyBatis作为一款流行的Java持久层框架,提供了调用存储过程的功能。下面将详细介绍如何在MyBatis中配置和使用存储过程。 ### 1. 配置MyBatis XML映射文件 在MyBatis的映射文件(mapper.xml)中,我们需要为存储...
相关推荐
使用 Spring JdbcTemplate 调用 Oracle 存储过程实现 CRUD 在本文中,我们将讨论如何使用 Spring JdbcTemplate 调用 Oracle 存储过程来实现 CRUD(Create、Read、Update、Delete)操作。我们将首先编写 Oracle 存储...
使用Spring的JdbcTemplate调用Oracle的存储过程
本文将深入探讨如何在Spring Boot项目中整合MyBatis,实现调用Oracle存储过程并处理游标返回的数据。 首先,我们需要在Spring Boot项目中引入相关的依赖。在`pom.xml`文件中添加Oracle JDBC驱动(ojdbc66-oracle...
能不能写个动态的业务,只输入存储过程名称,自动获取存储过程参数,并且参数的数据从前台传递过来...只根据输入不同的存储过程名称、参数内容,自动调用不同的存储过程。 已经使用在多个项目中 全开源项目 请放心下载
在Spring Boot应用中,调用Oracle数据库的存储过程有多种方式。本文主要介绍三种方法,包括使用`entityManagerFactory.unwrap(SessionFactory.class).openSession()`、直接使用`EntityManager`的`...
通过以上步骤,开发者可以在Spring和MyBatis环境中顺利地调用Oracle存储过程,实现复杂业务逻辑的处理。这不仅可以提高代码的可维护性,还能利用数据库的优势来优化性能。在进行这类操作时,一定要注意参数类型、...
Spring Boot 调用 Oracle 存储过程的两种方式及完整代码 在本文中,我们将为大家介绍 Spring Boot 调用 Oracle 存储过程的两种方式,并提供完整的代码示例。本文主要解决了在 Spring Boot 项目中调用 Oracle 存储...
"Mybatis调用Oracle存储过程传List参数解决方法" Mybatis是当前最流行的持久层框架之一,它提供了强大的数据访问和操作功能。但是,如何将List类型参数传递给Oracle存储过程,实现批量插入数据却是一个棘手的问题,...
Java调用Oracle存储过程是数据库操作中常见的任务,特别是在需要执行复杂业务逻辑或者批量处理数据时。本篇文章将详细介绍如何通过Java与Oracle数据库交互,调用存储过程,并提供几个简单的实例帮助新手理解。 首先...
总的来说,理解如何在Spring中正确地调用Oracle存储过程并传递数组参数是提高应用程序效率和数据库操作灵活性的重要技能。这涉及到了数据库设计、Java编程、Spring框架的使用以及对Oracle特定特性的掌握。通过上述...
本文将详细介绍如何在SSM项目中调用Oracle存储过程,这对于提升应用程序性能和简化复杂操作具有重要意义。 首先,让我们了解一下SSM框架。SSM是由Spring框架、SpringMVC和MyBatis三个组件组成的轻量级Java Web开发...
我们可以通过几种不同的方式调用Oracle存储过程。 使用 使用javax.persistence 。 我们在这种情况下使用了这种方法无论我们选择哪种方式,在使用spring-data时都应该设置一些关键方面/属性(尤其是当我们不让Spring...
执行Oracle存储过程主要涉及以下几个关键点: 1. 创建CallableStatement对象:使用Connection对象的`prepareCall()`方法创建CallableStatement实例,例如`CallableStatement cs = conn.prepareCall("{call procedure...
总之,使用Java调用Oracle存储过程进行数据库备份是一种常见的实践,它允许我们在应用程序中灵活地管理复杂的数据库操作,同时确保数据的安全性。结合适当的备份策略和工具,可以构建出高效可靠的数据库备份系统。
以下是一个Oracle数据库中的存储过程示例: ```sql CREATE OR REPLACE PROCEDURE pp (x IN NUMBER, y IN NUMBER, z OUT NUMBER) IS BEGIN SELECT x + y INTO z FROM dual; END pp; ``` 这个存储过程接收两个输入...
MyBatis作为一款流行的Java持久层框架,提供了调用存储过程的功能。下面将详细介绍如何在MyBatis中配置和使用存储过程。 ### 1. 配置MyBatis XML映射文件 在MyBatis的映射文件(mapper.xml)中,我们需要为存储...