注:本文来源 《  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. 修改教材P74 一行代码 NineNineTable.java, 让执行结果是个三角形

    修改教材P74 一行代码 NineNineTable.java, 让执行结果是个三角形: 提交在IDEA或命令行中运行结查截图,加上学号水印,没学号的不给成绩 2*9=18 3*9=27 4*9=36 ...

  2. SSR搭建服务器

    SSR搭建服务器一站式教程:https://ssr.tools/252

  3. Maven 那点事儿(转)

    0. 前言 Jason Van Zyl,在 Java 十大风云人物排行榜上或许会看到他. 这兄弟是干嘛的? 他就是 Maven 的创始人,人们都尊称他为“Maven 他爸”. 毋庸置疑,Jason 也 ...

  4. java.lang.NoSuchMethodError: org.apache.curator.framework.api.CreateBuilder.creatingParentsIfNeeded()Lorg/apache/curator/framework/api/ProtectACLCreateModeStatPathAndBytesable;

    1 错误信息 java.lang.NoSuchMethodError: org.apache.curator.framework.api.CreateBuilder.creatingParentsIf ...

  5. Vue 中循环绑定v-module表单

    子组件有一个列表要做输入验证 <template> <div> <el-form :model="value" ref="numberVal ...

  6. vi常用指令

    vi filename 打开文件 i 进入编辑模式 esc 退出编辑模式 : 进入指令模式 wq 保存退出 q!不存盘强制退出vi 按「a」进入插入模式后,是从目前光标所在位置的下一个位置开始输入文字 ...

  7. Python 19 Django 详解

    本节概要 Django详解 前言 有一部分原因是,确实djando的课程有点多:并且,最近又在研究利用python做数据分析时间上耽误了.所以楼主讲所有的课程全部重新观看了一遍,再来撰写博客,其实说起 ...

  8. python - 代码练习 - 备份目录/文件(windos环境)

    备份目录/文件 import zipfile import os,datetime class beifen(object): def __init__(self,files,new_files,co ...

  9. iTOP-4418开发板Ubuntu系统烧写方法分享

    开发平台:迅为iTOP-4418开发板    系统:Ubuntu   1. TF卡读写速度测试 烧写 Ubuntu 对于 TF 卡的要求比较高,很多老旧的卡都无法烧写 Ubuntu,下面提供一种 相对 ...

  10. MySql cmd下的学习笔记 —— 有关建立数据库的操作(连接Mysql,建立数据库,删除数据库等等)

    (01) 连接数据库 mysql -uroot -p 之后输入密码 ******.(由于我的密码设置的是111,所以输入的是111) (02) 退出数据库 exit (03) 查看数据库 show d ...