`
sbpya
  • 浏览: 615739 次
  • 性别: 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

 

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

分享到:
评论

相关推荐

    Spring JdbcTemplate调用Oracle存储过程实现CRUD

    我们将首先编写 Oracle 存储过程,然后编写 Java 代码使用 Spring JdbcTemplate 调用这些存储过程。 Oracle 存储过程 首先,我们编写了两个 Oracle 存储过程:`P_EMP_SELECT` 和 `P_EMP_ADD`。 `P_EMP_SELECT` ...

    JAVA调用ORACLE存储过程通用类

    ### JAVA调用ORACLE存储过程通用类 #### 概述 在Java开发中,经常会遇到需要与数据库交互的情况,特别是当涉及到复杂的业务逻辑时,利用数据库的存储过程可以有效地提高程序性能并简化代码结构。本篇文章将详细...

    springboot整合mybatis调用oracle存储过程

    本文将深入探讨如何在Spring Boot项目中整合MyBatis,实现调用Oracle存储过程并处理游标返回的数据。 首先,我们需要在Spring Boot项目中引入相关的依赖。在`pom.xml`文件中添加Oracle JDBC驱动(ojdbc66-oracle...

    Oracle存储过程、触发器

    Oracle存储过程和触发器是数据库管理系统中的重要组成部分,它们在数据处理和业务逻辑实现中扮演着关键角色。本文将深入探讨这两个概念以及它们在实际应用中的使用。 **Oracle存储过程** Oracle存储过程是一组预...

    ibatis调用oracle存储过程

    在IT领域,特别是数据库操作与Java开发中,利用ibatis框架调用Oracle存储过程是一个常见的需求,这不仅能够提升代码的执行效率,还能增强应用程序的安全性。本文将深入解析ibatis如何与Oracle数据库中的存储过程进行...

    java web中的oracle存储过程

    通过上述示例可以看出,在Java Web应用中利用Oracle存储过程可以高效地完成数据的增删查操作。这种方式不仅提高了代码的复用性和可维护性,还能够充分利用数据库的能力,减少网络传输数据量,提升整体性能。在实际...

    java传list给存储过程,项目提取,不忽悠源码整理

    提供的`javaSrc165.zip`文件很可能包含了一个示例项目,展示了如何在Java中将List传递给存储过程的具体实现。解压后,你可能找到一个或多个Java类,它们展示了如何创建`CallableStatement`,设置参数,并执行存储...

    调用存储过程入参出参为自定义对象_支持批量

    对于批量数据插入,示例代码还展示了如何使用列表(`List, String&gt;&gt;`)来批量处理数据,并将其转换为存储过程所需的二维数组格式。 ```java String[][] in_array = new String[count][colsName.length]; for (int i...

    Ibatis调用Oracle存储过程返回自定义类型

    ### Ibatis调用Oracle存储过程返回自定义类型 在企业级应用开发中,尤其是在金融、保险等业务场景中,往往需要处理复杂的数据结构与逻辑。本文将深入探讨如何使用Ibatis框架来调用Oracle数据库中的存储过程,并实现...

    oracle存储过程

    ### Oracle存储过程详解 #### 一、存储过程基础概念 **定义:** 存储过程(Stored Procedure)是指在数据库中预编译并存储的一系列SQL语句集合,它们被设计用于执行特定的任务。当用户需要执行这些任务时,只需...

    java调用存储过程

    然而,存储过程的功能远不止于此,它还能够实现更为复杂的数据操作逻辑,并且可以与其他编程语言如Java结合使用。 #### 二、创建存储过程示例 根据提供的部分内容,我们可以看到一个简单的存储过程`proc_select`...

    JAVA_JDBC面向对象分页(初步设计二之oracle)

    总结来说,面向对象的Java JDBC分页查询涉及到创建Page类来存储分页信息,构造Oracle兼容的SQL语句,以及使用PreparedStatement执行查询。在实际开发中,我们还需要关注性能优化、异常处理和代码的可维护性,确保...

    oracle调用webservice接口地址demo

    为了使Oracle能够调用基于Java的WebService,还需要安装JDK并配置Oracle对Java的支持: 1. **下载并安装JDK**:确保Oracle运行环境中已安装Java环境。 2. **加载Java支持**:使用`loadjava`工具加载必要的JAR文件到...

    ibatis调用oracle的函数,存储过程的方法 IN 和OUT /游标

    通过学习和实践这些技巧,开发者可以充分利用iBatis的优势,高效地在Java应用中调用Oracle的函数和存储过程,提高代码的可维护性和可扩展性。同时,了解数据库底层的工作原理也有助于优化性能,解决可能出现的问题。...

    Oracle + jdbcTemplate + Spring + Java + Flex 实现分页

    #### 二、Java调用Oracle存储过程 在Java端,可以利用Spring框架整合jdbcTemplate来调用Oracle存储过程。这里主要涉及以下步骤: 1. **配置数据源**:在Spring的配置文件中定义数据源。 2. **定义DAO层**:在DAO层...

    存储过程,触发器,远程数据库

    根据提供的文件信息,我们可以...通过以上介绍可以看出,存储过程、触发器和远程数据库连接都是Oracle数据库中非常重要的特性,它们可以帮助开发者更高效地管理数据、实现复杂的数据处理逻辑以及跨数据库访问等功能。

    疯狂Java讲义_示例代码

    5. **集合框架**:Java集合框架包括List、Set、Map接口和它们的实现类,如ArrayList、LinkedList、HashSet、HashMap等,这些示例代码将帮助你理解如何在实际项目中存储和操作数据。 6. **多线程**:Java内置对多...

    Oracle经典语法的调用

    #### 一、Oracle存储过程基础知识 存储过程是一种预先编写并存储于数据库中的SQL与编程语言混合的脚本。这些脚本可以包括复杂的逻辑,例如条件判断、循环等,使得它们能够在数据库内部执行更复杂的任务,如批量更新...

    springboot + jpa 批量存储示例

    在本文中,我们将深入探讨如何使用Spring Boot与Java Persistence API (JPA) 实现批量存储操作。Spring Boot简化了设置和配置,而JPA作为Java的ORM(对象关系映射)框架,允许开发者以面向对象的方式操作数据库。...

Global site tag (gtag.js) - Google Analytics