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

Spring 将集合传人Oracle

阅读更多
在业务开发过程中经常会遇到将大量的参数传人到Oracle的存储过程中,此时会用到Oracle的集合.

--创建条件参数对象类型
create or replace
TYPE TEAM_TRIP_OBJECT AS OBJECT(
    TICKET_NO NVARCHAR2(20),
    DEPARTURE_DATE NVARCHAR2(20),
    DEPARTURE_AIRPOART_CODE NVARCHAR2(10),
    ARRIVAL_AIRPORT_CODE NVARCHAR2(10)
);
--上述的类型的字段都用NVARCHAR2,否则传人到oracle中参数如果有中文都是乱码.

--创建条件集合类型
create or replace
TYPE TEAM_TRIP_OBJECT_ARRAY
AS TABLE OF TEAM_TRIP_OBJECT;

--创建存储过程
 PROCEDURE UPDATE_TEAM_PSG_TRIP_SUM(TEAM_TRIP_OBJECT_CONDITIONS IN TEAM_TRIP_OBJECT_ARRAY) AS
  BEGIN
     FOR i IN 1..TEAM_TRIP_OBJECT_CONDITIONS.COUNT
     LOOP
        //操作
     END LOOP;
  EXCEPTION 
     WHEN OTHERS
     THEN 
       RAISE; 
  END UPDATE_TEAM_PSG_TRIP_SUM;



在java中创建与TEAM_TRIP_OBJECT相对应的类TeamTripCondition.java,如下所示:


import java.sql.SQLData;
import java.sql.SQLException;
import java.sql.SQLInput;
import java.sql.SQLOutput;
public class TeamTripCondition implements SQLData {
	//在oracle数据库中需要创建此对象名称
	private String sqlType = "TEAM_TRIP_OBJECT";
	/**
	 * 票号
	 */
	private String ticketNo;
	/**
	 * 出发日期
	 */
	private String departDate;
	/**
	 * 出发机场三字码
	 */
	private String departCity;
	/**
	 * 到达机场三字码
	 */
	private String arrivalCity;
	public TeamTripCondition(){
		
	}
	public TeamTripCondition(String ticketNo,String departDate,String departCity,String arrivalCity){
		this.ticketNo = ticketNo;
		this.departDate = departDate;
		this.departCity = departCity;
		this.arrivalCity = arrivalCity;
	}
	/**
	 * define a get method to return the SQL type of the object  
	 */
	@Override
	public String getSQLTypeName() throws SQLException {
		return sqlType;
	}
	/**
	 * define the required readSQL() method
	 */
	@Override
	public void readSQL(SQLInput stream, String typeName) throws SQLException {
		sqlType = typeName;
		ticketNo = stream.readString();
		departDate = stream.readString();
		departCity = stream.readString();
		arrivalCity = stream.readString();
	}

	@Override
	public void writeSQL(SQLOutput stream) throws SQLException {
		stream.writeString(ticketNo);
		stream.writeString(departDate);
		stream.writeString(departCity);
		stream.writeString(arrivalCity);
	}

	public String getTicketNo() {
		return ticketNo;
	}

	public void setTicketNo(String ticketNo) {
		this.ticketNo = ticketNo;
	}

	public String getDepartDate() {
		return departDate;
	}

	public void setDepartDate(String departDate) {
		this.departDate = departDate;
	}

	public String getDepartCity() {
		return departCity;
	}

	public void setDepartCity(String departCity) {
		this.departCity = departCity;
	}

	public String getArrivalCity() {
		return arrivalCity;
	}

	public void setArrivalCity(String arrivalCity) {
		this.arrivalCity = arrivalCity;
	}

}
/**
 *创建使用Oracle存储过程的类,他需要继承StoredProcedure
 */
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Types;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.sql.DataSource;

import oracle.sql.ARRAY;
import oracle.sql.ArrayDescriptor;

import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.SqlParameter;
import org.springframework.jdbc.core.SqlTypeValue;
import org.springframework.jdbc.core.support.AbstractSqlTypeValue;
import org.springframework.jdbc.object.StoredProcedure;
import org.springframework.stereotype.Service;

import com.**.team.dto.TeamTripCondition;

@Service("teamTripService")
public class TeamTripService extends StoredProcedure {

	private static final Logger logger = Logger.getLogger(TeamTripService.class);
        //UPDATE_TEAM_PSG_TRIP_SUM是在Oracle包TEAM_INFO_PACKAGE的存储过程的名字
	private static final String SPROC_NAME = "TEAM_INFO_PACKAGE.UPDATE_TEAM_PSG_TRIP_SUM";
        //需要声明上述的Oracle存储过程UPDATE_TEAM_PSG_TRIP_SUM中传人参数的名字TEAM_TRIP_OBJECT_CONDITIONS
	private static final String TEAM_TRIP_OBJECT_CONDITIONS = "TEAM_TRIP_OBJECT_CONDITIONS";//
	@Autowired
	public TeamTripSchedulerServiceImpl(DataSource dataSource){
		super(dataSource, SPROC_NAME);
		declareParameter(new SqlParameter(TEAM_TRIP_OBJECT_CONDITIONS, Types.ARRAY,"TEAM_TRIP_OBJECT_ARRAY"));
		this.compile();
	}
	
	public void executeProc(final List<TeamTripCondition> conditions) {
		Map<String,Object> inParams = new HashMap<String,Object>();
		try{    
                        //将conditions转化成Oracle的集合
			SqlTypeValue value = new AbstractSqlTypeValue() {
				  protected Object createTypeValue(Connection conn, int sqlType, String typeName) throws SQLException {
				    ArrayDescriptor arrayDescriptor = new ArrayDescriptor(typeName, conn);
				    Object[] array = conditions.toArray();
				    ARRAY idArray = new ARRAY(arrayDescriptor, conn, array);
				    return idArray;
				  }
			};
			inParams.put(TEAM_TRIP_OBJECT_CONDITIONS, value);
			this.execute(inParams);
		}catch(Exception e){
			logger.error("updatePassengerTrip->executeProc*******ERROR:", e);
		}
	}
	
}
分享到:
评论

相关推荐

    初学SpringCloud连接Oracle数据库

    本篇文章将详细讲解如何在SpringCloud项目中配置Oracle数据库,并从数据库中获取数据。 首先,我们需要在项目中引入SpringBoot对Oracle数据库的支持。这可以通过在`pom.xml`文件中添加相应的依赖来实现。通常,你...

    基于struts+spring+hibernate+oracle的移动ssh项目源码

    基于struts+spring+hibernate+oracle的移动ssh项目源码 基于struts+spring+hibernate+oracle的移动ssh项目源码 基于struts+spring+hibernate+oracle的移动ssh项目源码 基于struts+spring+hibernate+oracle的移动ssh...

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

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

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

    在本文中,我们将讨论如何使用 Spring JdbcTemplate 调用 Oracle 存储过程来实现 CRUD(Create、Read、Update、Delete)操作。我们将首先编写 Oracle 存储过程,然后编写 Java 代码使用 Spring JdbcTemplate 调用...

    Spring boot连接oracle数据库JDBC配置步骤

    在本文中,我们将详细介绍如何使用 Spring Boot 连接 Oracle 数据库,配置 JDBC 驱动程序,并实现数据库的基本操作。 Step 1: 添加依赖项 在 Spring Boot 项目中,需要在 `build.gradle` 文件中添加 Oracle JDBC ...

    spring+ibatis+oracle分页缓存源码

    Spring、iBatis和Oracle的结合提供了强大的数据处理能力。本文将深入探讨这些技术如何协同工作,实现高效的分页缓存策略。 首先,Spring是一个开源的Java框架,它为开发人员提供了依赖注入(DI)和面向切面编程...

    spring-data-oracle-1.0.0.RELEASE.jar

    spring-data-oracle-1.0.0.RELEASE.jar下载

    asp.net_spring_nhibernate_oracle

    提示:开发前,先将nhibernate-configuration.xsd,nhibernate-mapping.xsd,spring-aop-1.1.xsd,spring-database-1.3.xsd和你能知道所有的xsd格式的spring相关文件放入到C:\Program Files\Microsoft Visual ...

    SpringMVC+Spring+Hibernate+Oracle 实现图书管理(CRUD)

    在这个案例中,"SpringMVC+Spring+Hibernate+Oracle 实现图书管理(CRUD)"是一个使用了四大主流Java技术栈的项目,分别是SpringMVC作为前端控制器、Spring作为应用层框架、Hibernate作为持久层框架,以及Oracle作为...

    mybatis+spring+springmvc+oracle

    这个项目“mybatis+spring+springmvc+oracle”就是一个典型的例子,它利用这些技术实现了对Oracle数据库的简单查询功能。下面将详细阐述其中涉及的主要知识点。 1. **MyBatis**: MyBatis 是一款优秀的持久层框架...

    spring+mybatis+oracle简易案例

    在本案例中,我们探讨的是如何使用Spring框架与MyBatis ORM工具来操作Oracle数据库,构建一个简单的应用程序。Spring作为一款强大的应用框架,提供依赖注入、AOP(面向切面编程)等功能,而MyBatis则是一个轻量级的...

    spring-jms-oracle-aq.rar_oracle aq_spring oracle aq_spring oracl

    本文将深入探讨如何在Spring框架中整合Oracle AQ,以便实现高效、可靠的JMS(Java Message Service)通信。 首先,让我们了解Oracle AQ的基本概念。Oracle AQ是Oracle数据库的一部分,它提供了一种存储和转发消息的...

    springcloud 可运行的demo 集成了oracle mysql

    这个名为 "spring-cloud-demo" 的项目是一个集成 Oracle 和 MySQL 数据库的可运行示例,旨在帮助学习者快速理解和实践 SpringCloud 技术栈。 首先,让我们深入了解 SpringBoot。SpringBoot 是由 Pivotal 团队提供的...

    Spring boot连接oracle,并显示数据到页面,并且实现可以打包war发布到tomcat

    在本项目中,我们将探讨如何使用Spring Boot框架与Oracle数据库进行交互,并将查询结果展示在Web页面上。同时,我们还会学习如何将Spring Boot应用打包为WAR文件并部署到Tomcat服务器。 首先,我们需要在Spring ...

    maven+spring+mvc+oracle+hibernate 实例

    【标题】"maven+spring+mvc+oracle+hibernate 实例" 是一个综合性的IT项目,旨在演示如何在Maven构建环境下整合Spring MVC、Oracle数据库和Hibernate ORM框架,以实现一个完整的Web应用程序。这个实例对于初学者或...

    struts2+spring+ibatis+oracle+分页搜索+上传附件实例

    Struts2、Spring、iBatis以及Oracle是Java Web开发中的四大核心组件,它们共同构建了一个强大且灵活的后端架构。在这个实例中,我们将会深入探讨这些技术如何协同工作,实现分页搜索功能和上传附件操作。 1. **...

    J2EE博客系统 struts2+spring+hibernate+oracle+lucene

    本篇将深入探讨一个基于J2EE的博客系统,该系统采用经典的“s2sh”整合框架,即Struts2、Spring和Hibernate,以及Oracle数据库和Lucene全文搜索引擎,旨在构建高效、稳定且功能齐全的博客平台。 首先,Struts2作为...

    车辆管理系统(struts2+spring+hibernate+oracle)

    本系统采用struts2+spring+hibernate+oracle代码齐全完整,适合作为SSH毕业设计,java毕业设计项目,计算机毕业设计,java课程设计,还是很不错的 很值得收藏 学习 探讨 研究。

    spring资料集合1

    spring有关的资料 包括pro spring \ pro spring2.5\spring 2.0 reference \精通spring 共三部分

Global site tag (gtag.js) - Google Analytics