![](/img/trans.png)
[英]Maven compilation and run time error java.lang.AbstractMethodError: oracle.jdbc.driver.T4CConnection.isValid(I)Z on Tomcat 8 Server
[英]Call procedure with a table type. Exception while create Struct: java.lang.AbstractMethodError: oracle.jdbc.driver.T4CConnection.createStruct
我嘗試創建Struct元素數組以將其傳遞給Oracle過程。 當我嘗試設置數組的第一個元素時,我收到異常:
java.lang.AbstractMethodError:oracle.jdbc.driver.T4CConnection.createStruct
可能是什么原因以及如何糾正這個問題? 我的例子:
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();
}
}
我之前的相同操作版本(使用ojdbc6)可以工作,但是它可以將數字正確保存到數據庫中,但是所有字符串均為空,因此我嘗試尋找另一種方法。 先前版本:
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();
}
}
這是由於ojdbc14.jar造成的 。 當我將其更改為ojdbc6(11.2.0.3)時 ,異常消失了。 但是,在這種情況下,應將方法createArrayOf()更改為此:
import oracle.jdbc.OracleConnection;
Array dataArray = ((OracleConnection)connection).createOracleArray(typeTableName, structs);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.