`
liss
  • 浏览: 844360 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

如何用JDBC给存储过程传递数组类型的参数

    博客分类:
  • JDBC
阅读更多

A . 嵌套表

1. 声明数组类型
       create or replace type tab_array is table of varchar2(38);暂时不要在包中声明该类型

2. 创建存储过程
         -- 该例子存储过程是在包中创建的,包名 arraydemo
         procedure testArray(resNumber in tab_array,procResult out tab_array) is
         begin
             procResult := new tab_array();
             for i in 1..resNumber.Count loop
                procResult.EXTEND;
                procResult(i) := resNumber(i) || 'lucifer' || i;
             end loop;
         end;

3. Java调用代码
    //必须使用Oracle的连接和Statement,使用了连接池的必须通过一些方法获取原始的连接
    OracleConnection conn = null;
    OracleCallableStatement stmt = null;
    String[] param = { "1001", "1002", "1006" };
    stmt =(转换类型) conn.prepareCall("{call arraydemo.testArray(?,?)}");
    // 类型名必须大写
    ArrayDescriptor descriptor = ArrayDescriptor.createDescriptor("TAB_ARRAY", conn);
    stmt.setARRAY(1, new ARRAY(descriptor,conn,param));
    stmt.registerOutParameter(2, OracleTypes.ARRAY, "TAB_ARRAY");
    stmt.execute();
  
    ARRAY array = stmt.getARRAY(2);
    Datum[] data = array.getOracleArray();
    for (int i = 0; i < data.length; i++) {
        System.out.println(i + " : " + new String(data.shareBytes()));
    }
4 . 注意的问题及尚未解决的问题
    抛出:Non supported character set: oracle-character-set-852 异常---解决:添加 nls_charset12.jar 到classpath,该包在oracle/ora92/jdbc/lib目录下
    待解决问题:
    a) 如何调用在包声明的自定义类型
    b) 比较不同声明类型的优缺点,及使用场合
    嵌套表其它应用:http://zhouwf0726.itpub.net/post/9689/212253

B . 索引表
C . 内置数组
D . 游标方式

分享到:
评论

相关推荐

    Spring访问传入数组参数的Oracle存储过程

    总的来说,理解如何在Spring中正确地调用Oracle存储过程并传递数组参数是提高应用程序效率和数据库操作灵活性的重要技能。这涉及到了数据库设计、Java编程、Spring框架的使用以及对Oracle特定特性的掌握。通过上述...

    oracle class12.jar nls_charset12.jar存储过程接收数组空值

    在Oracle数据库环境中,有时我们需要通过存储过程传递数组参数来处理批量数据。然而,在实际操作中,我们可能会遇到一个问题,那就是如何正确地处理数组中的空值(NULL)或空元素。"oracle class12.jar nls_charset...

    Mybatis调用PostgreSQL存储过程实现数组入参传递

    总结来说,本文详细讲解了如何在MyBatis中调用PostgreSQL的存储过程,特别是如何处理数组类型的输入参数。通过自定义`TypeHandler`,我们可以使MyBatis与PostgreSQL的数组类型无缝对接,实现高效、准确的数据操作。

    Java调用带参数的存储过程并返回集合

    在处理数组参数时,Oracle提供了PL/SQL TABLE类型的参数,Java可以通过数组或Java Collection类型传递。在返回集合时,可以将结果集映射到Java集合对象,如ArrayList或自定义的实体类,这样可以更好地适应业务需求。...

    java传list给存储过程,项目提取,不忽悠源码整理

    在Java编程中,将List对象传递给存储过程是一项常见的任务,特别是在进行数据库操作时。存储过程是数据库中预编译的SQL语句集合,可以接受参数、返回结果集以及执行复杂的业务逻辑。以下是对这个主题的详细阐述: 1...

    java传list给存储过程,项目提取,不忽悠

    在Java开发中,有时我们需要将数据集合,如List,传递给数据库中的存储过程进行处理。这个过程涉及到Java的JDBC(Java Database Connectivity)操作、集合处理以及与数据库交互的细节。下面将详细讲解如何在Java中...

    调用存储过程入参出参为自定义对象_支持批量

    根据给定的信息,本文将详细解释如何在Java中通过调用存储过程实现带有自定义对象作为参数的大批量数据处理,并且特别关注了入参为二维数组的批量插入以及出参为自定义对象(二维数组)的情况。此外,还将讨论与...

    如何从 Java 存储过程将 JDBC ResultSet 作为 Ref Cursor 返回.doc

    尽管如此,从REF CURSOR到ResultSet的逆向映射仍然不被支持,这意味着在当前版本中,你无法将REF CURSOR作为IN或IN OUT参数传递给Java存储过程。 为了从Java存储过程返回一个ResultSet作为REF CURSOR,需要特别处理...

    oracle存储过程

    在处理需要传入集合参数的情况时,我们需要使用`setArray()`方法,将Java集合转换为数据库兼容的数组类型。 参考文档"E3Tree参考手册[1.5].doc"很可能详细介绍了"e3tree"存储过程的使用方法、参数说明、示例和最佳...

    java调用存储过程实现批量入库.docx

    通过这种方式,Java程序创建一个包含100个元素的二维数组,每个元素代表一条要插入的数据,然后将其转换为Oracle数组类型,并传递给存储过程执行批量插入。 调用存储过程的好处在于,它减少了与数据库的交互次数,...

    oracle存储过程调用实践[文].pdf

    3. wrong number or types of arguments in call to *** 当调用存储过程时,传递的参数数量或类型与存储过程定义的不符,需要核对参数列表,确保传入的参数正确无误。 4. weblogic.jdbc.wrapper.Array_oracle_sql_...

    实战 Java 存储过程的编写及在 DB2 上的部署.docx

    2. **利用DB2的API和JDBC**:通过编写Java代码,使用DB2的JDBC驱动直接在数据库中创建存储过程。这种方式更加灵活,可以在程序中动态创建和更新存储过程。 在开发Java存储过程时,需要注意以下几点: - **错误处理...

    struts2+jdbc实现图片的存储与显示(图片存储在数据库内)

    4. **存储图片数据**:将之前转换成的字节数组作为参数,通过PreparedStatement的setBlob方法存入BLOB字段。注意,大对象的处理可能会涉及到流的处理,确保数据正确写入且流被正确关闭。 5. **图片的检索与显示**:...

    nls_charset12.jar

    描述中提到的“解决oracle11g存储过程传入数组空的问题”涉及到Oracle PL/SQL中的数组类型。在PL/SQL中,我们可以定义变量为数组类型,以便一次性处理多个值。但是,如果这些数组可能包含空值(NULL),我们需要特别...

    JDBC连接MySQL例子

    7. **大文本和图片上传**:在JDBC中,可以使用Blob类型存储二进制大数据,如图片。首先,将图片转换为字节数组,然后设置PreparedStatement的参数,最后执行插入语句。 8. **关闭资源**:确保在完成数据库操作后,...

    基于Java-JDBC访问Oracle9i对象关系数据库的一种实现方法.pdf

    Oracle9i数据库在传统的关系模型基础上扩展了对象关系特性,支持用户自定义类型(UDT),包括对象类型(记录类型)、数组类型和嵌套表类型。这使得数据库能够存储复杂的数据结构,如对象实例和变长属性。对象模型...

    图片存储到SQLServer数据库中

    4. **设置参数**:将字节数组作为参数传递给`PreparedStatement`,例如: ```java FileInputStream fis = new FileInputStream("image.jpg"); pstmt.setBytes(1, IOUtils.toByteArray(fis)); pstmt.setString(2,...

    将文件存储在数据库中

    5. **插入BLOB数据**: 创建SQL INSERT语句,将文件ID和字节数组作为参数传递,将数据写入数据库。 6. **执行SQL语句**: 连接数据库并执行插入操作。确保正确处理可能的异常和错误。 7. **关闭连接**: 完成操作后,...

Global site tag (gtag.js) - Google Analytics