java向存储过程传递集合类型的变量

 Oracle中把Array类型作为参数传入存储过程并用Java对其进行调用的示例是本文我们主要要介绍的内容,接下来我们就开始介绍这一过程.

  使用Oracle Database 11g Enterprise Edition Release 11.2.0.1.0. 步骤:

  1. 创建自定义的类型.由于Oracle没有提供现成的array类型,这里用table类型来模拟.

  CREATE OR REPLACE TYPE varchar_array is Table OF varchar2(128) 创建后,varchar_array是一个table,里面元素的类型为varchar2(128).

  2. 创建一个存储过程test1. 这个过程接受一个上面创建的varchar_array类型作为输入参数. 在过程体中,通过一个循环遍历传入的array中的每一个元素, 插入到一个表tb中:

  create or replace procedure test1(arr in varchar_array) is begin

  FOR i IN arr.first .. arr.last LOOP

  insert into tb values(arr(i));

  END LOOP;

  end test1;

  3. 数据库这边的基本上完事了. Java程序如下, 基本上和普通程序差不多:

  String driver = "oracle.jdbc.driver.OracleDriver";

  String strUrl = "jdbc:oracle:thin:@192.168.1.199:1521:orcl";

  Statement stmt = null;

  ResultSet rs = null;

  Connection conn = null;

  try { Class.forName(driver);

  conn = DriverManager.getConnection(strUrl, "user", "pass");

  CallableStatement proc = null;

  proc = conn.prepareCall("{ call test1(?) }");

  //调用存储过程test1

  //不一样的地方,获得上面创建的自定义的类型,注意大小写

  ArrayDescriptor descriptor = ArrayDescriptor.createDescriptor("VARCHAR_ARRAY",

  conn);

  List list = new ArrayList();

  list.add("a");

  list.add("b");

  //把list中的元素转换成自定义的类型

  ARRAY array = new ARRAY(descriptor, conn, list.toArray());

  proc.setArray(1,

  array);

  proc.execute();

  catch (Exception ex)

  {

  ex.printStackTrace();

  } finally

  {

  .....

  各种 close

  ......

  }

  执行该Java程序,查询表tb,程序中的元素正常插入.

  以上就是Oracle中把Array类型作为参数传入存储过程,并用Java对其进行调用的示例的全部,本文我们就介绍到这里了,希望本次的介绍能够对您有所收获!


原文出自【比特网】,转载请保留原文链接:http://soft.chinabyte.com/database/255/12193755.shtml

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
MyBatis支持存储过程传递集合参数,可以通过使用Java中的List或数组作为参数来实现。 在MyBatis中,首先需要在存储过程中定义一个表值类(table-valued type),用于接收集合参数。该表值类可以是一个临时表或已存在的表。 接下来,在Java代码中创建一个包含要传递的集合数据的List或数组对象。确保集合中的元素与存储过程中表值类中的列对应。 然后,在Mapper XML文件中声明一个存储过程调用语句,并使用<foreach>标签来遍历集合参数。可以通过item属性指定集合参数的名称,以及collection属性指定要遍历的集合对象。 最后,在存储过程调用语句中,使用该表值类变量作为参数来传递集合参数。 以下是一个示例: 存储过程中定义表值类: CREATE TYPE dbo.PersonsTableType AS TABLE ( id INT, name VARCHAR(50), age INT ) Java代码中创建集合参数: List<Person> persons = new ArrayList<>(); persons.add(new Person(1, "Alice", 20)); persons.add(new Person(2, "Bob", 30)); Mapper XML文件中的存储过程调用语句: <select id="getPersons" statementType="CALLABLE"> {CALL GetPersons(#{persons, jdbcType=STRUCT, javaType=java.sql.Array, typeHandler=org.mybatis.spring.typehandler.ArrayTypeHandler})} </select> 存储过程中的参数定义: CREATE PROCEDURE GetPersons @persons dbo.PersonsTableType READONLY AS -- 执行存储过程的逻辑 SELECT * FROM @persons 这样,就可以通过MyBatis传递集合参数给存储过程,并在存储过程中使用表值类接收集合参数,并进行处理。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值