`
sbpya
  • 浏览: 602903 次
  • 性别: Icon_minigender_1
  • 来自: 杭州,长沙
社区版块
存档分类
最新评论

oralce存储过程输入数据java List示例

阅读更多

一:java代码:

    1,Bean

     public class MObj {
 private Long mId;
 private String mName;
 private Double price;

 
 public void setMId(Long mId) {
  this.mId = mId;
 }

 public void setMName(String mName) {
  this.mName = mName;
 }

 public void setPrice(Double price) {
  this.price = price;
 }

 public Long getMId() {
  return (this.mId);
 }

 public String getMName() {
  return (this.mName);
 }

 public Double getPrice() {
  return (this.price);
 }
}

 

2,java测试代码:

  import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Types;
import java.util.ArrayList;
import java.util.List;

import oracle.sql.ARRAY;
import oracle.sql.ArrayDescriptor;
import oracle.sql.Datum;
import oracle.sql.STRUCT;
import oracle.sql.StructDescriptor;

/**
 * @author Leewinq
 *
 */
public class TestProcedureList {

 private static ARRAY getArray(Connection con, String OracleObj,
   String Oraclelist, List listData) throws Exception {
  ARRAY array = null;

  if (listData != null && listData.size() > 0) {
   ArrayDescriptor desc = ArrayDescriptor.createDescriptor(Oraclelist,con);
   
   StructDescriptor structdesc = new StructDescriptor(OracleObj, con);
   STRUCT[] structs = new STRUCT[listData.size()];

   for (int i = 0; i < listData.size(); i++) {
    /*
     * result = new Object[3]; // 数组大小应和你定义的数据库对象(AOBJECT)的属性的个数
     * result[0] = ((MObj) listData.get(i)).getMId(); //
     * 将list中元素的数据传入result数组 result[1] = ((MObj)
     * listData.get(i)).getMName(); result[2] = ((MObj)
     * listData.get(i)).getPrice();
     */
    Object[] result = { ((MObj) listData.get(i)).getMId(),
      ((MObj) listData.get(i)).getMName(),
      ((MObj) listData.get(i)).getPrice() };

    structs[i] = new STRUCT(structdesc, con, result);
   }

   array = new ARRAY(desc, con, structs);
  }
  return array;
 }

 /**
  * @return
  */
 private List makeData() {
  List list = new ArrayList<MObj>();

  MObj m1 = new MObj();
  m1.setMId(Long.valueOf(110000000000000061l));
  m1.setMName("订单物资一");
  m1.setPrice(1888.80);

  MObj m2 = new MObj();
  m2.setMId(Long.valueOf(110000000000000052l));
  m2.setMName("订单物资二");
  m2.setPrice(6666.80);

  list.add(m1);
  list.add(m2);

  return list;
 }

 private Connection getConn() throws Exception {

  Class c = Class.forName("oracle.jdbc.OracleDriver");
  Connection conn = DriverManager.getConnection(
    "jdbc:oracle:thin:@127.0.0.1:1521:ORCL", "xxxx", "xxx");

  return conn;
 }

 

 public static void main(String[] args) {
  TestProcedureList procedureList = new TestProcedureList();
  List listData = procedureList.makeData();
  Connection conn = null;

  try {
   conn = procedureList.getConn();


      if (conn != null && !conn.isClosed()) {
    ARRAY array_ = procedureList.getArray(conn, "AMATERIAL",
      "MLIST", listData);
    CallableStatement stmt = conn
      .prepareCall("{call test_varray(?,?)}");
    stmt.setArray(1, array_);
    stmt.registerOutParameter(2, Types.VARCHAR);
    stmt.execute();    
    
    String mName = stmt.getString(2);
    System.out.println("从oracle存储过程返回的结果:____________" + mName);
    
    conn.commit();
    stmt.close();   
   }
  } catch (Exception e) {
   e.printStackTrace();
  } finally {
   try {
    if (conn != null && !conn.isClosed()) {     
     conn.close();
     conn = null;
    }
   } catch (SQLException e) {
    e.printStackTrace();
   }
  }
 }
}

 

二,Oracle代码:

create table T_list_test
(
    list_test_id number(18),
    list_test_title varchar(200),
    list_test_price number(18,6)
)

 

CREATE  TYPE AMaterial AS OBJECT
(
       mid NUMBER(18),
       mname NVARCHAR2(200),   ----------切记,java对象中的String型,在创建oracle对象时,必须使用  NVARCHAR2,否则拿不到值
       mprice NUMBER(18,6)
)

 

CREATE TYPE mList AS TABLE OF AMaterial; 

 

CREATE OR REPLACE procedure test_varray(list_ IN mList,omName OUT VARCHAR2)
AS      
BEGIN
       FOR i IN 1..list_.count() LOOP
           dbms_output.put_line('第'||i||'个对象的ID为:__________'||list_(i).mid);
           dbms_output.put_line('第'||i||'个对象的name为:__________'||list_(i).mname);
           dbms_output.put_line('第'||i||'个对象的price为:__________'||list_(i).mprice);
          
           INSERT INTO T_list_test(list_test_id,list_test_title,list_test_price) VALUES (list_(i).mid,list_(i).mname,list_(i).mprice);        
                 
       END LOOP;
       omName := '操作成功!';
END;

 

SELECT * FROM T_list_test

 

以上代码,本人测试可以直接运行,请修改对应的数据库连接字符串

分享到:
评论

相关推荐

    JAVA上百实例源码以及开源项目源代码

     Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...

    JAVA上百实例源码以及开源项目

     Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...

    java开源包11

    使用redis作缓存时,支持list类型的高级数据结构,更适合论坛帖子列表这种类型的数据 5. 支持混合使用redis缓存和memcached缓存。可以将列表数据缓存到redis中,其他kv结构数据继续缓存到memcached 6. 支持redis的...

    java开源包6

    使用redis作缓存时,支持list类型的高级数据结构,更适合论坛帖子列表这种类型的数据 5. 支持混合使用redis缓存和memcached缓存。可以将列表数据缓存到redis中,其他kv结构数据继续缓存到memcached 6. 支持redis的...

    java开源包4

    使用redis作缓存时,支持list类型的高级数据结构,更适合论坛帖子列表这种类型的数据 5. 支持混合使用redis缓存和memcached缓存。可以将列表数据缓存到redis中,其他kv结构数据继续缓存到memcached 6. 支持redis的...

    java开源包9

    使用redis作缓存时,支持list类型的高级数据结构,更适合论坛帖子列表这种类型的数据 5. 支持混合使用redis缓存和memcached缓存。可以将列表数据缓存到redis中,其他kv结构数据继续缓存到memcached 6. 支持redis的...

    java开源包101

    使用redis作缓存时,支持list类型的高级数据结构,更适合论坛帖子列表这种类型的数据 5. 支持混合使用redis缓存和memcached缓存。可以将列表数据缓存到redis中,其他kv结构数据继续缓存到memcached 6. 支持redis的...

    java开源包5

    使用redis作缓存时,支持list类型的高级数据结构,更适合论坛帖子列表这种类型的数据 5. 支持混合使用redis缓存和memcached缓存。可以将列表数据缓存到redis中,其他kv结构数据继续缓存到memcached 6. 支持redis的...

    java开源包8

    使用redis作缓存时,支持list类型的高级数据结构,更适合论坛帖子列表这种类型的数据 5. 支持混合使用redis缓存和memcached缓存。可以将列表数据缓存到redis中,其他kv结构数据继续缓存到memcached 6. 支持redis的...

    java开源包10

    使用redis作缓存时,支持list类型的高级数据结构,更适合论坛帖子列表这种类型的数据 5. 支持混合使用redis缓存和memcached缓存。可以将列表数据缓存到redis中,其他kv结构数据继续缓存到memcached 6. 支持redis的...

    java开源包1

    使用redis作缓存时,支持list类型的高级数据结构,更适合论坛帖子列表这种类型的数据 5. 支持混合使用redis缓存和memcached缓存。可以将列表数据缓存到redis中,其他kv结构数据继续缓存到memcached 6. 支持redis的...

    java开源包3

    使用redis作缓存时,支持list类型的高级数据结构,更适合论坛帖子列表这种类型的数据 5. 支持混合使用redis缓存和memcached缓存。可以将列表数据缓存到redis中,其他kv结构数据继续缓存到memcached 6. 支持redis的...

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    9.2.1 示例数据 226 9.2.2 剖析Model子句 227 9.2.3 规则 228 9.3 位置和符号引用 229 9.3.1 位置标记 229 9.3.2 符号标记 230 9.3.3 FOR循环 231 9.4 返回更新后的行 232 9.5 求解顺序 233 9.5.1 行求解...

    oracle10g课堂练习II(1)

    RMAN 资料档案库数据存储:选项比较 2-9 备份目标 2-11 介质管理 2-12 将快速恢复区与 RMAN 配合使用 2-14 使用 EM 监视快速恢复区 2-16 快速恢复区的空间使用 2-17 V$FLASH_RECOVERY_AREA_USAGE 2-18 备份...

    java开源包2

    使用redis作缓存时,支持list类型的高级数据结构,更适合论坛帖子列表这种类型的数据 5. 支持混合使用redis缓存和memcached缓存。可以将列表数据缓存到redis中,其他kv结构数据继续缓存到memcached 6. 支持redis的...

    java开源包7

    使用redis作缓存时,支持list类型的高级数据结构,更适合论坛帖子列表这种类型的数据 5. 支持混合使用redis缓存和memcached缓存。可以将列表数据缓存到redis中,其他kv结构数据继续缓存到memcached 6. 支持redis的...

    Java资源包01

    使用redis作缓存时,支持list类型的高级数据结构,更适合论坛帖子列表这种类型的数据 5. 支持混合使用redis缓存和memcached缓存。可以将列表数据缓存到redis中,其他kv结构数据继续缓存到memcached 6. 支持redis的...

    OCPOCA认证考试指南全册:Oracle Database 11g(1Z0-051,1Z0-052,1Z0-053)--详细书签版(第2/2部分)

    第5章 Oracle存储结构 139 5.1 了解表空间和数据文件 140 5.1.1 Oracle数据存储模型 140 5.1.2 段、区间、块和行 142 5.1.3 文件存储技术 144 5.2 创建和管理表空间 146 5.2.1 创建表空间 146 5.2.2 更改表...

Global site tag (gtag.js) - Google Analytics