注:本文来源 《  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. 修改输入框placeholder的样式

    1. h5页面: //修改placeholder 样式 (chrome,其余类似加前缀) ::-webkit-input-placeholder { color:rgba(21,30,38,0.35) ...

  2. 2017CCPC秦皇岛 M题Safest Buildings&&ZOJ3993【复杂模拟】

    题意: 给出两个半径R,r,R表示第一次的大圈半径,r表示第二次的小圈半径.第一次大圈的圆心位于(0,0),第二次小圈的圆心未知,但在大圈内,给你一个n,然后给出n个屋子的位置,问这些屋子中,第二次在 ...

  3. linux switch 跳转到 ”跳转至 case 标号“ 的错误

    参考链接:  http://blog.csdn.net/qustdjx/article/details/8636489

  4. linux udp 函数说明

    int recvfrom(int sockfd,void *buf, int len, unsigned int flags, struct sockaddr *from, int *fromlen) ...

  5. zabbix系列 ~ 如何更好的利用mysql监控

    一 简介:今天来聊聊一些关于mysql 监控需要关注的问题二 实现的原理   1 global status   2 variables 三 我们需要关注的zabbix性能图  1 事务类型      ...

  6. Spring的aop操作

    1 在spring里面进行aop操作,使用aspectj实现(1)aspectj不是spring一部分,和spring一起使用进行aop操作(2)Spring2.0以后新增了对AspectJ支持2 使 ...

  7. 论文笔记系列-Speeding Up Automatic Hyperparameter Optimization of Deep Neural Networks by Extrapolation of Learning Curves

    I. 背景介绍 1. 学习曲线(Learning Curve) 我们都知道在手工调试模型的参数的时候,我们并不会每次都等到模型迭代完后再修改超参数,而是待模型训练了一定的epoch次数后,通过观察学习 ...

  8. 【Math for ML】线性代数之——向量空间

    I. Groups 在介绍向量空间之前有必要介绍一下什么Group,其定义如下: 注意定义中的\(\bigotimes\)不是乘法,而是一种运算符号的统一标识,可以是乘法也可以是加法等. 此外,如果\ ...

  9. openstack Q版部署-----Mysql、MQ、Memcached安装配置(2)

    一.安装mysql(contorller) 安装软件包: yum install -y mariadb mariadb-server python2-PyMySQL 配置my.cnf文件 vi /et ...

  10. Zookeeper环境搭建

    zookeeper支持windows.linux.mac等操作系统,其搭建方式也有集群.伪集群.单机环境.下面研究三种方式的搭建. 单机环境:windows操作系统 伪集群:windows 集群:li ...