2017-03-08 126 views
1

我正在调用来自java的存储过程,并将其作为输出参数给出struct。下面的代码都可以正常工作。无法将Weblogic结构类型转换为Oracle结构类型

conn = DriverManager.getConnection(URL,"username","password") 
StructDescriptor recDescriptor = StructDescriptor.createDescriptor("TCS_CHALLAN",conn); 
CallableStatement stmt = conn.prepareCall("{ call xx_get_challan_info(?, ?) }"); 
Object[] return_record_array = new Object[8]; 
STRUCT output_oracle_record; 
stmt.setObject(1, challan_no); 
stmt.registerOutParameter(2, OracleTypes.STRUCT, "TCS_CHALLAN"); 
output_oracle_record = ((OracleCallableStatement)stmt).getSTRUCT(2); 
return_record_array = output_oracle_record.getAttributes(); 

的问题时,我会在我的weblogic serverdatasource连接发生。

javax.naming.Context initialContext = new javax.naming.InitialContext(); 
javax.sql.DataSource dataSource = (javax.sql.DataSource)initialContext.lookup("jdbc/testApps"); 
conn = dataSource.getConnection(); 

随着上述conn对象时,我尝试相同的代码我得到一个错误

weblogic.jdbc.wrapper.Struct_oracle_sql_STRUCT cannot be cast to oracle.sql.STRUCT 

回答

0

2个可能的解决方案:

  1. 使用java.sql.Struct而不是oracle.sql。 STRUCT
  2. 投下连接:

javax.naming.Context initialContext = new javax.naming.InitialContext();
javax.sql.DataSource dataSource =(javax.sql.DataSource)initialContext.lookup(“java:comp/env/jdbc/MyDS”);
con = dataSource.getConnection();
vendorConnection =(oracle.jdbc.OracleConnection)((weblogic.jdbc.extensions.WLConnection)con).getVendorConnection();