简体   繁体   English

表类型的调用过程。 创建结构时发生异常:java.lang.AbstractMethodError:oracle.jdbc.driver.T4CConnection.createStruct

[英]Call procedure with a table type. Exception while create Struct: java.lang.AbstractMethodError: oracle.jdbc.driver.T4CConnection.createStruct

I try to create array of Struct elements to pass it to Oracle procedure. 我尝试创建Struct元素数组以将其传递给Oracle过程。 When I try to set first element of the array I receive an Exception: 当我尝试设置数组的第一个元素时,我收到异常:

java.lang.AbstractMethodError: oracle.jdbc.driver.T4CConnection.createStruct java.lang.AbstractMethodError:oracle.jdbc.driver.T4CConnection.createStruct

What might be the reason and how to correct this? 可能是什么原因以及如何纠正这个问题? My example: 我的例子:

import java.sql.Array;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Struct;

public class TypesApp {
    public static void main(String[] args) throws Exception {
        Class.forName("oracle.jdbc.OracleDriver");
        Connection connection =
                DriverManager.getConnection("jdbc:oracle:thin:@10.0.0.20:1521:dw", "user", "password");

    final String typeName = "T_DEMO_OBJECT";
    final String typeTableName = "T_DEMO_OBJECTS";

    Struct[] structs = new Struct[2];

    //Here I get the Exception
    structs[0] = connection.createStruct(typeName, new Object[]{23, "Testobject 1"});
    structs[1] = connection.createStruct(typeName, new Object[]{40, "Testobject 2"});

    CallableStatement callableStatement = connection.prepareCall("{call p_receive_demo_objects(?)}");

    Array dataArray = connection.createArrayOf(typeTableName, structs);
    callableStatement.setArray(1, dataArray);

    callableStatement.executeUpdate();
}

} }

My previous version of the same operation works (with ojdbc6), however it saves numbers to database correctly but all strings are empty, so I try to find another way. 我之前的相同操作版本(使用ojdbc6)可以工作,但是它可以将数字正确保存到数据库中,但是所有字符串均为空,因此我尝试寻找另一种方法。 Previous version: 先前版本:

import oracle.sql.ARRAY;
import oracle.sql.ArrayDescriptor;
import oracle.sql.STRUCT;
import oracle.sql.StructDescriptor;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Types;

public class InitMethod2 {

    public static void main(String[] args) throws Exception {
        Class.forName("oracle.jdbc.OracleDriver");
        Connection connection =
                DriverManager.getConnection("jdbc:oracle:thin:@10.0.0.20:1521:dw", "user", "password");

        final String typeName = "T_DEMO_OBJECT";
        final String typeTableName = "T_DEMO_OBJECTS";

        final StructDescriptor structDescriptor = StructDescriptor.createDescriptor(typeName.toUpperCase(), connection);

        final ArrayDescriptor arrayDescriptor =
                ArrayDescriptor.createDescriptor(typeTableName.toUpperCase(), connection);
        final ARRAY demoObjectsFromJava = new ARRAY(arrayDescriptor, connection, new STRUCT[]{
                // STRUCTS are created with the struct descriptor and a generic object array containing the values of the
                // attributes of the T_DEMO_OBJECT
                new STRUCT(structDescriptor, connection, new Object[]{23123, "Testobject 1"}),
                new STRUCT(structDescriptor, connection, new Object[]{42123, "Testobject 2"})});
        CallableStatement cs = connection.prepareCall("{call p_receive_demo_objects(?)}");
        cs.setObject(1, demoObjectsFromJava, Types.ARRAY);
        cs.execute();
        cs.close();

        connection.close();
    }

}

My pom.xml has the following dependency: 我的pom.xml具有以下依赖关系: 在此处输入图片说明

It was due to ojdbc14.jar . 这是由于ojdbc14.jar造成的 When I change it to ojdbc6 (11.2.0.3) the exception is gone. 当我将其更改为ojdbc6(11.2.0.3)时 ,异常消失了。 However in this case you should change method createArrayOf() to this one: 但是,在这种情况下,应将方法createArrayOf()更改为此:

import oracle.jdbc.OracleConnection;

Array dataArray = ((OracleConnection)connection).createOracleArray(typeTableName, structs);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 Maven编译和运行时错误java.lang.AbstractMethodError:Tomcat 8 Server上的oracle.jdbc.driver.T4CConnection.isValid(I)Z - Maven compilation and run time error java.lang.AbstractMethodError: oracle.jdbc.driver.T4CConnection.isValid(I)Z on Tomcat 8 Server 为什么会出现java.lang.AbstractMethodError:oracle.jdbc.driver.OracleConnection错误? - Why do I get java.lang.AbstractMethodError: oracle.jdbc.driver.OracleConnection error? oracle.jdbc.driver.T4CConnection.getSchema()异常 - oracle.jdbc.driver.T4CConnection.getSchema() exception Java异常java.lang.AbstractMethodError - Java Exception java.lang.AbstractMethodError java.io.NotSerializableException-oracle.jdbc.driver.T4CConnection - java.io.NotSerializableException - oracle.jdbc.driver.T4CConnection 启动点燃时发生java.lang.abstractmethoderror - java.lang.abstractmethoderror while Starting an Ignite java.lang.AbstractMethodError - java.lang.AbstractMethodError java.lang.ClassCastException:oracle.jdbc.driver.T4CConnection无法转换为com.arjuna.ats.internal.arjuna.recovery.Connection - java.lang.ClassCastException: oracle.jdbc.driver.T4CConnection cannot be cast to com.arjuna.ats.internal.arjuna.recovery.Connection 无法将JAVA / Oracle-weblogic.jdbc.wrapper.poolconnection_oracle_jdbc_driver_t4cconnection强制转换为oracle.jdbc.driver.oracleconnection - JAVA/Oracle-weblogic.jdbc.wrapper.poolconnection_oracle_jdbc_driver_t4cconnection cannot be cast to oracle.jdbc.driver.oracleconnection java.lang.AbstractMethodError 在尝试通过 rabbitMQ 实现 nexmo SDK 的入站呼叫时发生 - java.lang.AbstractMethodError occurs while trying to implement call inbound of nexmo SDK through rabbitMQ
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM