首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Oracle java jdbc错误

Oracle java jdbc错误
EN

Stack Overflow用户
提问于 2014-06-04 23:45:08
回答 1查看 1.3K关注 0票数 1

我只是简化了我的代码,这样任何人都可以重现这个问题。数据库数据为:

代码语言:javascript
复制
CREATE OR REPLACE TYPE HBD."MY_OBJECT" AS OBJECT
(
VALUE VARCHAR2(1)
)
/

CREATE OR REPLACE TYPE HBD."MY_COLLECTION" AS TABLE OF MY_OBJECT
/

CREATE OR REPLACE PACKAGE HBD.MY_PACKAGE
IS
   --Obtener detalle de un contrato
   PROCEDURE MY_STORED_PROCEDURE (
      out_value OUT NOCOPY HBD.MY_COLLECTION
   );
END MY_PACKAGE;
/

CREATE OR REPLACE PACKAGE BODY HBD.MY_PACKAGE
IS
   --Obtener detalle de un contrato
   PROCEDURE MY_STORED_PROCEDURE (
      out_value OUT NOCOPY HBD.MY_COLLECTION
   )
   IS
   BEGIN
      out_value := MY_COLLECTION();
      FOR i IN 1..10920 LOOP
        out_value.EXTEND;
        out_value (i) := NEW MY_OBJECT ('A');
      END LOOP;
   END;
END MY_PACKAGE;
/

我的java代码是:

代码语言:javascript
复制
public static void main(String[] args) throws SQLException,
        MalformedObjectNameException, NullPointerException,
        AttributeNotFoundException, InstanceNotFoundException,
        MBeanException, ReflectionException {

    System.out.println("Start");

    Connection connection = DriverManager.getConnection(
            "XXX", "YYY", "ZZZ");

    String PROCEDURE = "{call MY_PACKAGE.MY_STORED_PROCEDURE(?)}";

    CallableStatement cs = connection.prepareCall(PROCEDURE);
    cs.registerOutParameter(1, Types.ARRAY, "MY_COLLECTION");
    cs.execute();
    Array array = cs.getArray(1);
    if (array == null) {
        System.out.println("array == null");
    } else {
        System.out.println("array != null");
    }
    cs.close();
    connection.close();
    System.out.println("End");
}

正如您在存储过程中看到的,这里有一个10920。如果我将此值更改为任何其他值。代码的输出结果为: array!=null。对于10920,输出是: array==null。

提前谢谢。琼恩

EN

Stack Overflow用户

发布于 2014-06-04 23:54:27

检查以确保您使用的ojdbc*.jar文件与您的ORACLE版本兼容:

classes12.jar -用于Java 1.2和1.3 ojdbc14.jar -用于Java 1.4和1.5 ojdbc5.jar -用于Java 1.5 ojdbc6.jar -用于Java 1.6

http://www.oracle.com/technetwork/database/enterprise-edition/jdbc-112010-090769.html

Oracle Database 11g Release 2 (11.2.0.3) JDBC驱动程序

下载ojdbc5.jar (2,095,932字节)-用于JDK 1.5的类。它包含JDBC驱动程序类,但Oracle对象和集合类型中的NLS支持类除外。下载ojdbc5_g.jar (3,426,203字节)-与ojdbc5.jar相同,不同之处在于类是用"javac -g“编译的,并且包含跟踪代码。

下载ojdbc6.jar (2,714,189字节)-用于JDK 1.6的类。它包含JDBC驱动程序类,但Oracle对象和集合类型中的NLS支持类除外。下载ojdbc6_g.jar (4,463,274字节)- Sa

尝试使用OracleTypes.ARRAY而不是Types.ARRAY

代码语言:javascript
复制
import oracle.jdbc.OracleCallableStatement;
import oracle.jdbc.OracleTypes;

cs.registerOutParameter(6, OracleTypes.STRUCT, "OHSI_CABECERA_CONTRATO");
cs.registerOutParameter(7, OracleTypes.ARRAY, "CHSI_HABITACION");
cs.registerOutParameter(8, OracleTypes.ARRAY, "CHSI_TARIFAS");
cs.registerOutParameter(9, OracleTypes.ARRAY, "CHSI_COMISION_WEB");
cs.registerOutParameter(10, OracleTypes.ARRAY, "CHSI_GRATUIDAD");
cs.registerOutParameter(11, OracleTypes.ARRAY, "CHSI_ESTANCIA_MINIMA");

执行后,使用此代码检查并访问数组

代码语言:javascript
复制
ARRAY array = (ARRAY) cs.getArray(1);
if (array != null && array.length() > 0) {
rs = array.getResultSet();
} 
票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24041904

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档