有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

升级到ojdbc812后出现java NullPointerException。2.0.1

我已将我的应用程序从ojdbc7-12.1.0.2.0升级到ojdbc8-12.2.0.1,并且在开始出现下一个异常之前,代码运行良好:

java.lang.NullPointerException
at java.lang.System.arraycopy(Native Method)
at oracle.jdbc.driver.DynamicByteArray.get(DynamicByteArray.java:538)
at oracle.jdbc.driver.ByteArray.get(ByteArray.java:330)
at oracle.jdbc.driver.Accessor.getBytesInternal(Accessor.java:865)
at oracle.jdbc.driver.TypeAccessor.pickledBytes(TypeAccessor.java:49)
at oracle.jdbc.driver.NamedTypeAccessor.getOracleObject(NamedTypeAccessor.java:215)
at oracle.jdbc.driver.NamedTypeAccessor.getARRAY(NamedTypeAccessor.java:279)
at oracle.jdbc.driver.OracleCallableStatement.getArray(OracleCallableStatement.java:2075)
at oracle.jdbc.driver.OracleCallableStatementWrapper.getArray(OracleCallableStatementWrapper.java:543)
at sun.reflect.GeneratedMethodAccessor14.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.apache.tomcat.jdbc.pool.StatementFacade$StatementProxy.invoke(StatementFacade.java:114)
at com.sun.proxy.$Proxy5.getArray(Unknown Source)

该代码调用Oracle存储过程,该存储过程将struct数组作为输出参数:

statement.registerOutParameter(2, OracleTypes.ARRAY, "START_OF_TIMES");

下一个代码从输出数组读取数据:

    Object[] data = (Object[]) statement.getArray(2).getArray();
    for (Object tmp : data) {
        Struct row = (Struct) tmp;
        Object[] attributes = row.getAttributes();

        final BigDecimal id = (BigDecimal)attributes[0];
        final BigDecimal time = (BigDecimal)attributes[1];
        final String name = String.valueOf(attributes[2]);

最有可能的是,在提到的数组中没有任何数据,但这不是ojdbc使用NPE失败的原因

任何解决这个问题的想法都是非常受欢迎的


共 (0) 个答案