注:本文来源 《  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

1:存储过程

  1 CREATE OR REPLACE TYPE TEST_OBJECT AS OBJECT
2 (
3 id number,
4 name varchar2(32)
5 );
6 CREATE OR REPLACE TYPE TABLES_ARRAY AS VARRAY(100) OF TEST_OBJECT;
7 drop table test purge;
8 create table test
9 (
10 id number,
11 name varchar2(32)
12 );
13 create or replace procedure t_list_to_p(arr_t in tables_array)
14 is
15 begin
16 for i in 1..arr_t.count loop
17 insert into test values(arr_t(i).id,arr_t(i).name);
18 end loop;
19 commit;
20 end t_list_to_p;

2:Java 实现逻辑代码

  1 import java.sql.CallableStatement;
2 import java.sql.Connection;
3 import java.sql.DriverManager;
4 import java.sql.SQLException;
5 import java.util.ArrayList;
6 import java.util.List;
7 import oracle.sql.ARRAY;
8 import oracle.sql.ArrayDescriptor;
9 import oracle.sql.STRUCT;
10 import oracle.sql.StructDescriptor;
11
12 public class TestListToProcedure {
13 static final String driver_class = "oracle.jdbc.driver.OracleDriver";
14 static final String connectionURL = "jdbc:oracle:thin:@10.150.15.150:1521:orcl";
15 static final String userID = "test";
16 static final String userPassword = "test";
17 public void runTest() {
18 Connection con = null;
19 CallableStatement stmt = null ;
20 try {
21 Class.forName (driver_class).newInstance();
22 con = DriverManager.getConnection(connectionURL, userID, userPassword);
23 StructDescriptor tDescriptor = StructDescriptor.createDescriptor("TEST_OBJECT", con);
24 List<STRUCT> structs = new ArrayList<STRUCT>();
25 Object[] tObject = null ;
26 //能够将系统中VO,DTO转化成Object对象,先创建struts
27 for(int i = 0; i<10; i++){
28 tObject = new Object[2];
29 tObject[0] = i;
30 tObject[1] = "name"+i;
31 STRUCT tStruct = new STRUCT(tDescriptor, con, tObject);
32 structs.add(tStruct);
33 }
34 ArrayDescriptor arrayDescriptor = ArrayDescriptor.createDescriptor("TABLES_ARRAY", con);
35 ARRAY tArray = new ARRAY(arrayDescriptor, con, structs.toArray());
36 stmt = con.prepareCall("{call t_list_to_p(?
37 )}");
38 stmt.setArray(1, tArray);
39 stmt.execute();
40 } catch (SQLException e) {
41 e.printStackTrace();
42 } catch (Exception e) {
43 e.printStackTrace();
44 }finally{
45 if(stmt != null){
46 try {
47 stmt.close();
48 } catch (SQLException e) {
49 e.printStackTrace();
50 }
51 }
52 if(con != null){
53 try {
54 con.close();
55 } catch (SQLException e) {
56 e.printStackTrace();
57 }
58 }
59 }
60 }
61 public static void main(String[] args) {
62 TestListToProcedure testListToProcedure = new TestListToProcedure();
63 testListToProcedure.runTest();
64 }
65
66 }
67
68

java怎样将一组对象传入Oracle存储过程的更多相关文章

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

    注:本文来源于  深圳gg  < java如何将一个List传入Oracle存储过程   > 一:数据库端建一个PL/SQL的数组. CREATE OR REPLACE TYPE tabl ...

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

    java怎样将一个List传入Oracle存储过程.样例例如以下: 数据库端建一个PL/SQL的数组. CREATE OR REPLACE TYPE tables_array AS VARRAY(10 ...

  3. 数组做为参数传入Oracle存储过程操作数据库

    p { margin-bottom: 0.25cm; direction: ltr; color: rgb(0, 0, 0); line-height: 120%; text-align: justi ...

  4. oracle——存储过程参数

    oracle 存储过程类型: 1.in:输入类型,即由应用程序将数据传入oracle存储过程中:这种参数在存储过程中是只读参数,在存储过程中无法对该类型的参数进行修改: 2.out:输出参数,是在存储 ...

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

    //1.call+包名+存储过程名(传入.传出值用?) String str="{call SMSBUSINESS.deleteZhZMember(?,?,?)}"; //2.建立 ...

  6. 用java调用oracle存储过程总结

    以前一直没有动存储过程是用来干嘛的,后来请教朋友才换为自己的理解方式,用自己通俗的语言来说,就是把sql语句换为一个过程,也可以说是一个方法,每次直接给参数调用就好,使用存储过程查询速度快,系统只编译 ...

  7. 用java 调用oracle存储过程总结

    SSM-Mybatis调用Oracle存储过程返回结果集(游标)示例 https://www.jianshu.com/p/0ae6d9d66d61 用java调用oracle存储过程总结 //1.ca ...

  8. Oracle存储过程入参传入List集合的小例子

    第一步:创建一个对象类型 create or replace type STUDENT as object( id ), name ), age ) ); / 第二步:创建一个数组类型 (任意选择下面 ...

  9. oracle存储过程(返回列表的存储结合游标使用)总结 以及在java中的调用

    这段时间开始学习写存储过程,主要原因还是因为工作需要吧,本来以为很简单的,但几经挫折,豪气消磨殆尽,但总算搞通了,为了避免后来者少走弯路,特记述与此,同时亦对自己进行鼓励. 以下是我在开发项目中第一次 ...

随机推荐

  1. Java SE之I/O流:知识框架

  2. 第27月第24天 git pull fetch

    1. 在进行 pull 操作的同时,其实就是 fetch+merge 的一个过程.我们从 remote 分支中拉取新的更新,然后再合并到本地分支中去. 如果 remote 分支超前于本地分支,并且本地 ...

  3. Rem自适应js---flexible.min.js

    网上看到很多移动端适配的各种方法,由于原来工作中对rem的疏忽,所以决定重新学习rem~ 由于移动端特殊性,本文讲的是如何使用rem实现自适应,或叫rem响应式布局,通过使用一个脚本就可以rem自适应 ...

  4. python中的日志操作和发送邮件

    1.python中的日志操作 安装log模块:pip install nnlog 参数:my_log = nnlog.Logger('server_log.log',level='debug',bac ...

  5. python栈

    class StackEmptyError(Exception): pass class StackFullError(Exception): pass class Stack: def __init ...

  6. Spring Cloud学习资料

    博客 1.跟我学Spring Cloud 2.周立|Spring Cloud 3.Spring Cloud基础教程(强烈推荐) 4.Spring Cloud系列文章 5.forezp|史上最简单的 S ...

  7. mysql案例~mysql主从复制延迟概总

    浅谈mysql主从复制延迟 1 概念解读 需要知道以下几点 1 mysql的主从同步上是异步复制,从库是串行化执行 2 mysql 5.7的并行复制能加速从库重做的速度,进一步缓解 主从同步的延迟问题 ...

  8. java--GC Root有哪些

    GC管理的主要区域是Java堆,一般情况下只针对堆进行垃圾回收.方法区.JVM栈和Native栈不被GC所管理,因而选择这些非堆区的对象作为GC roots,被GC roots引用的对象不被GC回收. ...

  9. js对象遍历输出顺序错乱的问题

    一.js对象遍历顺序错乱的原因 下边就来实践一下: var obj={'3':'ccc',name:'abc',age:23,school:'sdfds',class:'dfd',hobby:'dsf ...

  10. MySQL绿色版安装整套流程

    https://www.cnblogs.com/LiuChunfu/p/6426918.html