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

使用spring调用oracle 的存储过程procedure实践

阅读更多

平台中调用oracle 的存储过程procedure实例解析 中解析了平台使用spring调用oracle procedure的实例. 这里自己写一个简单的测试类.

1.获得datasource, 这里通过jdbc连接.见 java项目使用spring jdbc连接数据库

2. 分析知spring主要通过StoredProcedure(spring-jdbc.jar包中的 org.springframework.jdbc.object.StoredProcedure)类进行对procedure的调用.

 

而StoreProcedure为abstract, 不能实例化对象 ,所以需子类继承.并重写父类一些方法.

public class TestSpring extends StoredProcedure {

3.加载datasource,通过读源代码知 在构造方法中加载DataSource

public TestSpring(DataSource dataSource, String procedureName) {
		super(dataSource, procedureName);
	}	
 public TestSpring(DataSource dataSource, String procedureName, boolean isFunction) {

  super(dataSource, procedureName);
  super.setFunction(isFunction);
 }

 注:第二个构造方法, isFunction指所调用的是函数(Function)or存储过程(Procedure), 这里我以调用function为例.是有第二个构造方法

4.调用方法

所调用的存储过程为

function isUser(LOGIN_NAME in varchar2, PASSWORD in varchar2)
    return integer as
    vUserID integer;
  begin
    select ID
      into vUserID
      from Users
     where upper(LOGIN_ID) = upper(isUser.LOGIN_NAME)
       and PASSWORD = isUser.PASSWORD
       and STATUS in (1, 3);
  
    return vUserID;
  
  exception
    when NO_DATA_FOUND then
      return - 1;
  end;

 

5.声明 输入和输出 的参数和oracle 中定义的一致(用到org.springframework.jdbc.core.SqlParameter 和 org.springframework.jdbc.core.SqlOutParameter )  

 SqlParameter paramIn = new SqlParameter("LOGIN_NAME", OracleTypes.IVARCHAR);

sp.declareParameter(paramIn);

 

paramIn = new SqlParameter("PASSWORD", OracleTypes.VARCHAR);

sp.declareParameter(paramIn);

 

paramIn = new SqlOutParameter("vUserID", OracleTypes.INTEGER);  // SqlOutParameter是Sqlparameter的子类

sp.declareParameter(paramIn);

// 编译

sp.compile(); 

6. 加载输入和输出值 都以Map的形式进行加载

Map inParams =  new HashMap();

inParams.put("LOGIN_NAME", "***");

inParams.put("PASSWORD", "***");

 

7 ,执行调用

Map result = sp.execute(inParams);

结果处理:

Integer uid = (Integer) result.get("vUserID");

 

由于代码写的较乱, 只粘贴主要代码:

	DataSource ds;
	@Test
	public void getDatasource() throws SQLException{
		ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
		 ds = (DataSource)ctx.getBean("dataSource");
		logger.info("datasource : " + ds);
	}

 

 

	public void testInvokeProcedure() throws SQLException{
		getDatasource();
		StoredProcedure sp = new TestSpring(ds, "UserPkg.isUser", true);
		SqlParameter param;
		//out parameter
		param = new SqlOutParameter("vUserID", OracleTypes.INTEGER);
		sp.declareParameter(param);
		//in parameter
		param = new SqlParameter("LOGIN_NAME", OracleTypes.VARCHAR);
		sp.declareParameter(param);
		
		param = new SqlParameter("PASSWORD", OracleTypes.VARCHAR);
		sp.declareParameter(param);
		
		sp.compile();

		Encryption enc = new Encryption("abn_admin", "000000" );
		String encPassword = enc.encrypt();
		logger.info("encPassword:  " +encPassword);
		
		Map inParams = new HashMap();
		inParams.put("LOGIN_NAME", "abn_admin");
		inParams.put("PASSWORD", encPassword);

		Map result = sp.execute(inParams );
		logger.info("message : " + (Integer)result.get("vUserID") );

	}

 

 

0
8
分享到:
评论
2 楼 曾老师 2014-02-06  
请问你这个调用数据库中 StoredProcedure 的方法 是最常用到的方式吗?? 总觉得有点麻烦 勿见怪,感觉你的代码很有条理不错
1 楼 liang_sky 2012-02-05  
你好,谢谢你的帖子给我提供了不小的帮助,正好要用到spring的StoredProcedure,对于代码里的Map inParams = new HashMap();是不是要用LinkedHashMap,因为我这使用HashMap总是出问题,用LinkedHashMap就可以

相关推荐

    springboot整合mybatis调用oracle存储过程

    本文将深入探讨如何在Spring Boot项目中整合MyBatis,实现调用Oracle存储过程并处理游标返回的数据。 首先,我们需要在Spring Boot项目中引入相关的依赖。在`pom.xml`文件中添加Oracle JDBC驱动(ojdbc66-oracle...

    Springboot调用Oracle存储过程的几种方式.docx

    在Spring Boot应用中,调用Oracle数据库的存储过程有多种方式。本文主要介绍三种方法,包括使用`entityManagerFactory.unwrap(SessionFactory.class).openSession()`、直接使用`EntityManager`的`...

    spring mybatis 调用oracle存储过程

    本文将深入探讨如何在Spring和MyBatis集成环境中调用Oracle数据库的存储过程,包括无返回值、返回结果集以及返回多个结果的情况。 首先,让我们理解基础概念。Spring是一个全面的后端开发框架,它提供了依赖注入、...

    Spring boot调用Oracle存储过程的两种方式及完整代码

    在 Spring Boot 项目中,我们可以使用 EntityManager 的 createStoredProcedureQuery 方法来调用 Oracle 存储过程。下面是一个示例代码: ```java @Repository public class ProdureDAO { @PersistenceContext ...

    Spring访问传入数组参数的Oracle存储过程

    总的来说,理解如何在Spring中正确地调用Oracle存储过程并传递数组参数是提高应用程序效率和数据库操作灵活性的重要技能。这涉及到了数据库设计、Java编程、Spring框架的使用以及对Oracle特定特性的掌握。通过上述...

    java调用oracle存储过程

    在Java中调用Oracle存储过程,你需要使用`CallableStatement`对象。`CallableStatement`是`PreparedStatement`的子类,专门用于调用数据库存储过程。以下是如何使用`CallableStatement`调用上面定义的存储过程`sp_...

    SSM+Oracle 存储过程例子

    本文将详细介绍如何在SSM项目中调用Oracle存储过程,这对于提升应用程序性能和简化复杂操作具有重要意义。 首先,让我们了解一下SSM框架。SSM是由Spring框架、SpringMVC和MyBatis三个组件组成的轻量级Java Web开发...

    项目里用到用java写oracle的存储过程,做个备份

    总之,使用Java调用Oracle存储过程进行数据库备份是一种常见的实践,它允许我们在应用程序中灵活地管理复杂的数据库操作,同时确保数据的安全性。结合适当的备份策略和工具,可以构建出高效可靠的数据库备份系统。

    jdbc连接oracle,执行存储过程,带数据库存储过程

    本篇将详细介绍如何使用JDBC连接Oracle数据库并执行存储过程。 首先,我们需要理解JDBC的基本概念。JDBC是Java平台的标准API,它允许Java程序与各种数据库进行通信。通过JDBC,我们可以创建数据库连接、发送SQL语句...

    ibatis调用存储过程介绍

    在Java开发中,使用iBATIS(现在称为MyBatis)作为持久层框架时,调用数据库的存储过程是一种常见的需求。本文将详细介绍如何使用iBATIS调用存储过程,并提供一个简单的示例来说明其过程。 首先,我们需要在数据库...

    MyBatis调用存储过程

    下面将详细介绍如何在MyBatis中配置和使用存储过程。 ### 1. 配置MyBatis XML映射文件 在MyBatis的映射文件(mapper.xml)中,我们需要为存储过程创建一个`<select>`标签,但与通常的查询不同,这里需要设置`id`...

    Oracle + jdbcTemplate + Spring + Java + Flex 实现分页.docx

    2. 使用Spring的jdbcTemplate调用存储过程,处理输入输出参数。 3. 将存储过程返回的数据在Java后端进行处理,封装成适合前端的数据结构。 4. Flex前端通过HTTP服务或AMF获取数据,展示在DataGrid中,并实现分页导航...

    Oracle + jdbcTemplate + Spring + Java + Flex 实现分页

    在Java端,可以利用Spring框架整合jdbcTemplate来调用Oracle存储过程。这里主要涉及以下步骤: 1. **配置数据源**:在Spring的配置文件中定义数据源。 2. **定义DAO层**:在DAO层定义方法,用于调用存储过程。 3. *...

    springboot集成oracle

    最后,对于复杂的SQL查询,可以使用`@Query`注解配合JPA Repository,或者通过`@Procedure`调用存储过程。 总之,Spring Boot集成Oracle数据库涉及多个步骤,包括引入依赖、配置数据库连接、编写DAO层代码、事务...

    camel-stored-procedure:一个简单的项目,展示了一个 bean 的使用,它可以被配置为调用存储过程,作为一个 Camel 组件

    描述这是一个简单的项目,它演示了如何为特定存储过程配置 Spring bean 并参与 Apache Camel 路由。设置和安装设置环境和运行此演示的步骤: 查找可用的 Oracle 数据库环境,或安装 Oracle XE 11g。 转至下载它及其...

    oracle jdbc pdf

    Oracle JDBC 支持调用数据库中的存储过程。这可以通过`CallableStatement`对象实现。 示例代码: ```java String sql = "{ CALL test_procedure(?, ?) }"; CallableStatement cstmt = conn.prepareCall(sql); cstmt...

    JAVA 连接数据库

    至于调用Oracle的存储过程,Java提供了`CallableStatement`接口。通过`{call}`语法来调用存储过程,参数可以作为输入、输出或输入/输出参数传递。例如,调用一个名为`PROCEDURE_NAME`的存储过程,可能的代码如下: ...

Global site tag (gtag.js) - Google Analytics