2017-03-08 139 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();