一、问题

  我们调用数据,大都是可以直接获取表中的数据,或者用复杂点的sql语句组成的。但是,有时候,当这样达不到我们要的全部数据的时候,这时,我们就用到了存储过程【sp】,如果sp需要参数是数组的话,要怎么办呢?

二、解决之法

public CbsResult payForBills(final String sapId, final String office,final ArrayList<String> custCdes) {
Connection con = DBUtil.getCbsConnection();
ArrayDescriptor arrDesc;
ARRAY arr;
CbsResult cbs=null;
CallableStatement cs=null;
try {
cs=con.prepareCall("{call CBS_TEST.CBS_PKG_EMF_PCARD.CBS_PRC_PCARD_DEDUCT_ITF(?,?,?,?,?,?,?,?,?,?)}");
arrDesc = ArrayDescriptor.createDescriptor("CBS_TEST.CHAR_ARRAY", getNativeConnection(con));
arr = new
ARRAY(arrDesc, getNativeConnection(con), custCdes.toArray());
cs.setString(, sapId);
cs.setString(, office);
cs.setArray(3, arr);
cs.setString(, "EMF");
cs.setString(, "EB");// EB/CORIS
cs.setString(, "OB");
cs.setString(, "O");
cs.setString(, "DEDUCT");
cs.registerOutParameter(, OracleTypes.VARCHAR);
cs.registerOutParameter(, OracleTypes.VARCHAR);
cs.execute();
cbs=new CbsResult(cs.getString(), cs.getString(), null);
} catch (SQLException e) {
e.printStackTrace();
}finally{
DBUtil.close(con, cs, null);
}
return cbs==null?new CbsResult():cbs;
}

注意:

  1、数组参数,必须在oracle数据库的存储过程中定义一个集合类型:

create or replace
type CHAR_ARRAY as table of VARCHAR2();

  2、红色字体是存储过程中,数组的定义的名字,一定要保持一致。

  3、绿色字体,是数组参数具体的实现方法。

Java SpringMvc+hibernate架构中,调用Oracle中的sp,传递数组参数的更多相关文章

  1. oracle 在C# 中调用oracle的数据库时,出现引用库和当前客户端不兼容的问题解决方案

    oracle 在C# 中调用oracle的数据库时,出现引用库和当前客户端不兼容的问题解决方案 解决方案 1.直接引用  Oracle.ManagedDataAccess.Client.dll动态库即 ...

  2. spring+springmvc+hibernate架构、maven分模块开发样例小项目案例

    maven分模块开发样例小项目案例 spring+springmvc+hibernate架构 以用户管理做測试,分dao,sevices,web层,分模块开发測试!因时间关系.仅仅測查询成功.其它的准 ...

  3. 在Android Studio中调用so中的方法

    本节用的so是上节用Android Studio创建的so.想在Android Studio中调用so中的方法,需要先引用so.Android Studio中引用so的方法有二种,下面开始介绍. 一 ...

  4. 在VS2012中采用C++中调用DLL中的函数 (4)

    这两天因为需要用到VS2012来生成一个DLL代码,但是之前并没有用过DLL相关的内容,从昨天开始尝试调试DLL的文件调用,起初笔者在网络上找到了3片采用VSXXX版本进行调试的例子,相关的内容见本人 ...

  5. 在C++中调用DLL中的函数 (3)

    1.dll的优点 代码复用是提高软件开发效率的重要途径.一般而言,只要某部分代码具有通用性,就可将它构造成相对独立的功能模块并在之后的项目中重复使用.比较常见的例子是各种应用程序框架,ATL.MFC等 ...

  6. 在C++中调用DLL中的函数

    如何在C++中调用DLL中的函数 应用程序使用DLL可以采用两种方式:一种是隐式链接,另一种是显式链接.在使用DLL之前首先要知道DLL中函数的结构信息.Visual C++6.0在VC\bin目录下 ...

  7. vue 在methods中调用mounted中的方法?

    首先可以在data中先声明一个变量 比如 isShow=' ' mounted 中 ---> methods 中 --->  this.sureDelBox(item) 直接this调用 ...

  8. 【原创】在VS2012中采用C++中调用DLL中的函数(4)

    这两天因为需要用到VS2012来生成一个DLL代码,但是之前并没有用过DLL相关的内容,从昨天开始尝试调试DLL的文件调用,起初笔者在网络上找到了3片采用VSXXX版本进行调试的例子,相关的内容见本人 ...

  9. 在C++中调用DLL中的函数(3)

    1.dll的优点 代码复用是提高软件开发效率的重要途径.一般而言,只要某部分代码具有通用性,就可将它构造成相对独立的功能模块并在之后的项目中重复使用.比较常见的例子是各种应用程序框架,ATL.MFC等 ...

随机推荐

  1. (转载)php循环检测目录是否存在并创建(循环创建目录)

    (转载)http://www.jb51.net/article/25917.htm php循环检测目录是否存在并创建,需要的朋友可以参考下. 循环创建目录方法 这个会生成image.gif目录 代码如 ...

  2. AutoItLibrary

    问题: [ ERROR ] Error in file 'E:\test\test_AutoItLibrary.txt': Initializing test library 'AutoItLibra ...

  3. HDU 1078 FatMouse and Cheese (记忆化搜索+dp)

    详见代码 #include <iostream> #include <cstdio> #include <cstdlib> #include <memory. ...

  4. HW4.24

    public class Solution { public static void main(String[] args) { double sum = 0; for(int i = 1; i &l ...

  5. Bash For Loop Examples

    How do I use bash for loop to repeat certain task under Linux / UNIX operating system? How do I set ...

  6. JAVA 调用Axis2 code generator 生成的webservice

    以下代码为调用 JAVA 调用Axis2 code generator 生成的webservice的代码. package test; import java.rmi.RemoteException; ...

  7. CSS学习之盒子模式

    从CSS角度来看,页面上每个元素都是一个盒子,不管是块元素还是内敛元素等.而这个盒子由四个部分组成.内容区,补白,边框,边界,下面来介绍下这四种元素. 1 内容 每个元素都是以某些内容开始的,比如文本 ...

  8. 遮罩层的实现(纯js兼容版)

    这个代码是我以前测试时候的代码了,主要用到的知识点是opacity和filer分别实现 “标准浏览器”和IE浏览器下的半透明,使用js的document.body.offsetwidth 和scree ...

  9. c# 扩展方法奇思妙用集锦

    本文转载:http://www.cnblogs.com/ldp615/archive/2009/08/07/1541404.html 其中本人觉得很经典的:c# 扩展方法奇思妙用基础篇五:Dictio ...

  10. ibatis 开发中的经验 (一)ibatis 和hibernate 在开发中的理解

    这个项目的底层是用ibatis框架完毕,这几天也是都在用这个框架写代码,也有了一些简单的理解,把项目拿过来后基本的配置都已经配置好了,比方一些事务.日志控制等,在开发中主要用到的是写SQL语句以及熟悉 ...