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
begin
  for i in arr_t.first .. arr_t.last loop
    insert  into test values(arr_t(i));
  end loop;
  commit;
end t_list_to_p;

java代码:

import java.sql.Array;
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;

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);
            stmt = con.prepareCall("{call t_list_to_p(?)}");
            ArrayDescriptor descriptor = ArrayDescriptor.createDescriptor("TABLES_ARRAY",con);
            List list = new ArrayList();
            list.add("张三");
            list.add("李四");
            list.add("王五");
            ARRAY array = new ARRAY(descriptor,con,list.toArray());
            stmt.setArray(1, array);
            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-29 17:50:11

java如何将一个List传入Oracle存储过程的相关文章

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怎样将一组对象传入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如何将一组对象传入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) );

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

Oracle存储过程根据传入参数查询

Oracle存储过程中根据传入参数查询时无效 环境:Oracle11g 需求:根据传入的参数作为条件,查询相关数据 问题:条件无效 代码: create or replace procedure XXX(associatedId in varchar,typeinfoid in varchar) as sheetcontent clob; begin select wm_concat(t.datasource) into sheetcontent from xly_associatedorder