@Transactional(rollbackFor=DAOException.class)
@Override
public void callFinanceInterface(String procedure, String type,
String typeArray, List parms,List parmList) throws DAOException {
OracleCallableStatement callStatement = null;
try {
//获取容器管理的[连接池连接],该连接应当由Spring容器关闭, 你应当在DAO或者更外层的Service,Action上使用@Transactional来开启事务
Connection pooledConn = DataSourceUtils.getConnection(super.getDataSource());
//抽取出(原始连接)
Connection conn = nativeJdbcExtractor.getNativeConnection(pooledConn); //该连接不应当关闭
// 创建结构描述器
StructDescriptor sd = new StructDescriptor(type,
(OracleConnection) conn);
// 创建结构数组
STRUCT[] struct = new STRUCT[parms.size()];
// 把java集合的值设置给Oracle结构数组中
for (int i = 0; i < parms.size(); i++) {
Object[] objs = AgroUtil.valuesToArray(parms.get(i));
struct[i] = new STRUCT(sd, conn, objs);
}
// 创建数组描述器
ArrayDescriptor ad = ArrayDescriptor.createDescriptor(typeArray,
conn);
// 创建数组
ARRAY array = new ARRAY(ad, conn, struct);
String temp = "?";
if(parmList!=null){
for (int i = 0; i < parmList.size(); i++) {
temp += ",?";
}
}
// 调用存储过程
callStatement = (OracleCallableStatement) conn.prepareCall("{call "
+ procedure + "("+temp+")}");
// 设置参数
callStatement.setARRAY(1, array);
if(parmList!=null){
for (int i = 0; i < parmList.size(); i++) {
callStatement.setObject(i + 2, parmList.get(i));
}
}
// 执行
callStatement.executeUpdate();
} catch (Exception e) {
logger.error("调用财务接口错误",e);
throw new DAOException("调用财务接口错误", e);
} finally {
if (callStatement != null) {
try {
callStatement.close();
} catch (Exception e) {
throw new DAOException(
"callFinanceInterface: close callStatement error! ",
e);
}
}
}
}
分享到:
相关推荐
在Java编程中,调用存储过程是连接数据库并执行预定义SQL代码的一种常见方式。存储过程是由数据库管理系统(如MySQL, Oracle, SQL Server等)编译并存储的一组操作,可以包含复杂的逻辑、条件判断、循环等,提高数据...
java,调用存储过程java,调用存储过程java,调用存储过程java,调用存储过程java,调用存储过程java,调用存储过程java,调用存储过程java,调用存储过程java,调用存储过程java,调用存储过程java,调用存储过程
在Java编程中,调用数据库的存储过程是常见的任务,特别是在处理复杂的业务逻辑或需要高效数据操作时。本文将详细讲解如何在Java中调用含有`OUT`参数的存储过程,帮助开发者解决这类问题。 首先,理解存储过程的...
java 调用存储过程 总结 创建表 创建存储过程 创建java程序调用
### JAVA调用存储过程知识点详解 #### 一、无结果集返回的存储过程调用 在Java中调用不返回结果集的存储过程时,主要步骤包括建立连接、准备调用语句、设置输入参数、执行存储过程以及处理可能产生的警告信息。 1...
### Java调用存储过程的两种方法 在Java中调用数据库中的存储过程是常见的操作之一,这不仅可以提高程序性能和代码可维护性,还可以更好地利用数据库的功能。根据提供的标题、描述以及部分内容,本文将详细介绍Java...
在Java编程中,调用Oracle数据库的存储过程和函数是常见的任务,这通常涉及到JDBC(Java Database Connectivity)API的使用。以下将详细介绍这个过程,包括必要的步骤、使用的类和方法,以及可能遇到的问题和解决...
### Java调用存储过程——传入集合参数:深入解析与实践 #### 核心知识点概览 在Java应用中,调用数据库存储过程时,往往需要处理复杂的参数传递,特别是当参数为集合类型时,这一过程变得更加具有挑战性。本文将...
在Java中,可以使用类似的方法调用此存储过程,但需要额外处理游标的结果。 #### 结论 Java调用存储过程是实现高效数据库交互的关键技术。通过正确设置参数、执行存储过程并管理资源,可以在Java应用中充分利用存储...
在Java应用程序中,可以通过Java Database Connectivity (JDBC) API来调用MySQL的存储过程。 首先,确保你已经安装了MySQL数据库,并且在数据库中创建了一个或多个存储过程。例如,`findAllBook`、`pro_test`和`pro...
以上就是使用Java调用Oracle存储过程的方法,包括处理基本类型返回值和游标返回值。在实际开发中,可能还需要处理异常、事务管理等问题,确保代码的健壮性和可维护性。同时,为了提高性能,建议使用连接池管理数据库...
本文将详细介绍 Java 调用 DB2 存储过程的方法和步骤,并提供了详细的代码示例。 一、创建存储过程 在 DB2 中,创建存储过程需要使用 CREATE PROCEDURE 语句。例如,创建一个无参存储过程可以使用以下语句: ```...
在Java编程中,调用数据库存储过程是一种常见的操作,特别是在处理复杂的业务逻辑或者批量数据操作时。本篇文章将深入探讨如何使用Java与MySQL数据库进行交互,实现调用存储过程,并提供一个测试通过的实例。 首先...
能不能写个动态的业务,只输入存储过程名称,自动...只写一个通用方法,就可以调用所有的存储过程。只根据输入不同的存储过程名称、参数内容,自动调用不同的存储过程。 已经使用在多个项目中 全开源项目 请放心下载
总结来说,Java调用存储过程并处理返回数组,需要理解存储过程的定义,正确使用`CallableStatement`或其子类如`OracleCallableStatement`,以及处理Oracle特定数据类型的方法。通过这些技巧,我们可以有效地在Java...
在Java编程中,调用MySQL存储过程是一种常见的数据库交互方式,尤其在处理复杂业务逻辑或大量数据操作时。本文将详细讲解如何通过Java来执行MySQL的存储过程。 首先,了解存储过程的基本概念。存储过程是预编译在...