java如何将一组对象传入Oracle存储过程

java如何将一组对象传入Oracle存储过程,例子如下:

CREATE OR REPLACE TYPE TEST_OBJECT AS OBJECT
(
  id number,
  name varchar2(32)
);
CREATE OR REPLACE TYPE TABLES_ARRAY AS VARRAY(100) OF TEST_OBJECT;
drop table test purge;
create table test
(
  id number,
  name varchar2(32)
);
create or replace procedure t_list_to_p(arr_t in tables_array)
is
begin
  for i in 1..arr_t.count loop
      insert  into test values(arr_t(i).id,arr_t(i).name);
  end loop;
  commit;
end t_list_to_p;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import oracle.sql.ARRAY;
import oracle.sql.ArrayDescriptor;
import oracle.sql.STRUCT;
import oracle.sql.StructDescriptor;

public class TestListToProcedure {
    static final String driver_class  = "oracle.jdbc.driver.OracleDriver";
    static final String connectionURL = "jdbc:oracle:thin:@10.150.15.150:1521:orcl";
    static final String userID        = "test";
    static final String userPassword  = "test";
    public void runTest() {
        Connection  con = null;
        CallableStatement stmt = null ;
        try {
            Class.forName (driver_class).newInstance();
            con = DriverManager.getConnection(connectionURL, userID, userPassword);
            StructDescriptor tDescriptor = StructDescriptor.createDescriptor("TEST_OBJECT", con);
        	List<STRUCT> structs = new ArrayList<STRUCT>();
        	Object[] 	tObject  = null ;
        	//可以将系统中VO,DTO转化成Object对象,先创建struts
        	for(int i = 0; i<10; i++){
        		tObject = new Object[2];
        		tObject[0] = i;
        		tObject[1] = "name"+i;
                STRUCT tStruct = new STRUCT(tDescriptor, con, tObject);
                structs.add(tStruct);
        	}
        	ArrayDescriptor arrayDescriptor = ArrayDescriptor.createDescriptor("TABLES_ARRAY", con);
        	ARRAY tArray = new ARRAY(arrayDescriptor, con, structs.toArray());
            stmt = con.prepareCall("{call t_list_to_p(?)}");
            stmt.setArray(1, tArray);
            stmt.execute();
        }  catch (SQLException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }finally{
        	if(stmt != null){
        		try {
					stmt.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
        	}
        	if(con != null){
        		try {
        			con.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
        	}
        }
    }
    public static void main(String[] args) {
    	TestListToProcedure testListToProcedure = new TestListToProcedure();
    	testListToProcedure.runTest();
    }

}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-09 13:20:29

java如何将一组对象传入Oracle存储过程的相关文章

java怎样将一组对象传入Oracle存储过程

java怎样将一组对象传入Oracle存储过程.须要注意的是jar包是有要求的,假设使用不当会导致仅仅有数字能传过去,字符串传只是去.假设是Oracle11g则须要选用例如以下的jar包,F:\app\Administrator\product\11.2.0\dbhome_1\jlib\orai18n.jar. D:\program\weblogic\oracle_common\modules\oracle.jdbc_11.2.0\ojdbc6.jar 样例例如以下: CREATE OR REP

java怎样将一个List传入Oracle存储过程

java怎样将一个List传入Oracle存储过程.样例例如以下: 数据库端建一个PL/SQL的数组. CREATE OR REPLACE TYPE tables_array AS VARRAY(100) OF VARCHAR2(32) ; drop table test purge; create table test ( name varchar2(32) ); create or replace procedure t_list_to_p(arr_t in tables_array) is

java如何将一个List传入Oracle存储过程

java如何将一个List传入Oracle存储过程,例子如下: 数据库端建一个PL/SQL的数组. CREATE OR REPLACE TYPE tables_array AS VARRAY(100) OF VARCHAR2(32) ; drop table test purge; create table test ( name varchar2(32) ); create or replace procedure t_list_to_p(arr_t in tables_array) is b

oracle pl/sql之在java中调用无参的oracle存储过程

在java 中调用oracle的存储过程和jdbc的操作类似都是分以下几个步骤 1:加载驱动 2:链接数据库并获得一个数据库链接对象 3:执行语句 4:操作结果集 5:关闭资源 前提是:存储过程已写好 create or replace procedure my_procedure is begin insert into emp(empno,ename) values(9527,'唐伯虎'); end; java程序演示: import java.sql.CallableStatement;i

oracle——存储过程参数

oracle 存储过程类型: 1.in:输入类型,即由应用程序将数据传入oracle存储过程中:这种参数在存储过程中是只读参数,在存储过程中无法对该类型的参数进行修改: 2.out:输出参数,是在存储过程中对该值进行赋值,在程序中获取值. 3.in out:输入输出参数,兼具以上两种特性,但可读可写. 验证输入参数: 由于默认参数是输入类型的,在上图中,对BAcount参数赋值,报错. 解决办法: CREATE OR REPLACE PACKAGE body BAWQ_PROC_JGZX IS

用java调用oracle存储过程总结(转)

//1.call+包名+存储过程名(传入.传出值用?) String str="{call SMSBUSINESS.deleteZhZMember(?,?,?)}"; //2.建立连接 Connection conn=null; conn=DriverManager.getConnection(); //3.使用java.sql.*类 CallableStatement cs=conn.prepareCall(str); //4.传入in值 cs.setInt(1,id); cs.se

springMVC + oracle存储过程 构建高性能灵活易维护的java web架构

MVC让简单的业务也变得复杂 不知道你在使用MVC模式开发项目的时候是否觉得很麻烦,一个简单的增删改查动作却要涉及到多个文件操作. 以一条数据增加为例说明. 假设我们使用hibernate并且dao层是已经封装好的 从图中可以看出如果我们在系统中写一个增加功能需要自己动手写的地方至少是 jsp , action , service,servicesImpl 四层. 如果是复杂的添加操作那么我们很可能还会自己定义dao层的接口和方法,那样就是6层操作了. 如果使用mybatis 至少也是写4层,常

在java中调用Oracle存储过程

在java中调用Oracle存储过程 本文介绍如何通过java来调用Oracle的存储过程 1. 编写存储过程 CREATE OR REPLACE PROCEDURE sp_pro3(sp_name VARCHAR2,sp_sal NUMBER ) IS BEGIN --根据用户名修改工资 UPDATE emp SET sal=sp_sal WHERE ename=sp_name; END; 引入jdbc6.jar,编写测试类Test.java package testOraclePro; im

Java调用Oracle存储过程

一:无返回值的存储过程 存储过程为: CREATE OR REPLACE PROCEDURE TESTA(PARA1 IN VARCHAR2,PARA2 IN VARCHAR2) AS BEGIN INSERT INTO HYQ.B_ID (I_ID,I_NAME) VALUES (PARA1, PARA2); END TESTA; 然后呢,在java里调用时就用下面的代码: import java.sql.*; import java.sql.ResultSet; public class T