在业务开发过程中经常会遇到将大量的参数传人到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数据库,并从数据库中获取数据。 首先,我们需要在项目中引入SpringBoot对Oracle数据库的支持。这可以通过在`pom.xml`文件中添加相应的依赖来实现。通常,你...
基于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 存储过程来实现 CRUD(Create、Read、Update、Delete)操作。我们将首先编写 Oracle 存储过程,然后编写 Java 代码使用 Spring JdbcTemplate 调用...
在本文中,我们将详细介绍如何使用 Spring Boot 连接 Oracle 数据库,配置 JDBC 驱动程序,并实现数据库的基本操作。 Step 1: 添加依赖项 在 Spring Boot 项目中,需要在 `build.gradle` 文件中添加 Oracle JDBC ...
Spring、iBatis和Oracle的结合提供了强大的数据处理能力。本文将深入探讨这些技术如何协同工作,实现高效的分页缓存策略。 首先,Spring是一个开源的Java框架,它为开发人员提供了依赖注入(DI)和面向切面编程...
spring-data-oracle-1.0.0.RELEASE.jar下载
提示:开发前,先将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)"是一个使用了四大主流Java技术栈的项目,分别是SpringMVC作为前端控制器、Spring作为应用层框架、Hibernate作为持久层框架,以及Oracle作为...
这个项目“mybatis+spring+springmvc+oracle”就是一个典型的例子,它利用这些技术实现了对Oracle数据库的简单查询功能。下面将详细阐述其中涉及的主要知识点。 1. **MyBatis**: MyBatis 是一款优秀的持久层框架...
在本案例中,我们探讨的是如何使用Spring框架与MyBatis ORM工具来操作Oracle数据库,构建一个简单的应用程序。Spring作为一款强大的应用框架,提供依赖注入、AOP(面向切面编程)等功能,而MyBatis则是一个轻量级的...
本文将深入探讨如何在Spring框架中整合Oracle AQ,以便实现高效、可靠的JMS(Java Message Service)通信。 首先,让我们了解Oracle AQ的基本概念。Oracle AQ是Oracle数据库的一部分,它提供了一种存储和转发消息的...
这个名为 "spring-cloud-demo" 的项目是一个集成 Oracle 和 MySQL 数据库的可运行示例,旨在帮助学习者快速理解和实践 SpringCloud 技术栈。 首先,让我们深入了解 SpringBoot。SpringBoot 是由 Pivotal 团队提供的...
在本项目中,我们将探讨如何使用Spring Boot框架与Oracle数据库进行交互,并将查询结果展示在Web页面上。同时,我们还会学习如何将Spring Boot应用打包为WAR文件并部署到Tomcat服务器。 首先,我们需要在Spring ...
【标题】"maven+spring+mvc+oracle+hibernate 实例" 是一个综合性的IT项目,旨在演示如何在Maven构建环境下整合Spring MVC、Oracle数据库和Hibernate ORM框架,以实现一个完整的Web应用程序。这个实例对于初学者或...
Struts2、Spring、iBatis以及Oracle是Java Web开发中的四大核心组件,它们共同构建了一个强大且灵活的后端架构。在这个实例中,我们将会深入探讨这些技术如何协同工作,实现分页搜索功能和上传附件操作。 1. **...
本篇将深入探讨一个基于J2EE的博客系统,该系统采用经典的“s2sh”整合框架,即Struts2、Spring和Hibernate,以及Oracle数据库和Lucene全文搜索引擎,旨在构建高效、稳定且功能齐全的博客平台。 首先,Struts2作为...
本系统采用struts2+spring+hibernate+oracle代码齐全完整,适合作为SSH毕业设计,java毕业设计项目,计算机毕业设计,java课程设计,还是很不错的 很值得收藏 学习 探讨 研究。
spring有关的资料 包括pro spring \ pro spring2.5\spring 2.0 reference \精通spring 共三部分