2017-06-16 47 views
0

我使用WLS 12.1.3和Oracle是10.2.0,我使用WebLogic數據源獲取連接 這是代碼,從WLS - 數據源連接對象Types.ARRAY不工作

CallableStatement cst = null; 
    try { 
     cst = conn 
       .prepareCall("{call myProc(?,?,?,?,?,?,?,?)}"); 
     final String typeTableName = "studentdetails"; 

     cst.setInt(1, student.getEmpid()); 
     cst.setInt(2, student.getOrgid()); 
     cst.setInt(3, student.getYearid()); 
     cst.setString(4, student.getClassType()); 
     cst.setInt(5, student.getStudentid()); 
     cst.registerOutParameter(6, Types.ARRAY, typeTableName); 
     cst.registerOutParameter(7, java.sql.Types.VARCHAR); 
     cst.registerOutParameter(8, java.sql.Types.VARCHAR); 
         long startTime=System.currentTimeMillis(); 
     cst.execute(); 
         String dat=cst.getString(7); 
         //Array arr = cst.getArray(6); 
         long endTime=System.currentTimeMillis(); 

     if (null != cst.getObject(6)) { 
      data = (Object[]) ((Array) cst.getObject(6)).getArray(); 
     } 

這是連接對象,然後調用語句OBJ

cst = (weblogic.jdbc.wrapper.CallableStatement_oracle_jdbc_driver_OracleCallableStatementWrapper) weblogic.jdbc.wrapper.Call[email protected]53 

conn = (weblogic.jdbc.wrapper.JTAConnection_weblogic_jdbc_wrapper_XAConnection_oracle_jdbc_driver_LogicalConnection) [weblogic.jdbc.wrapper.JTAConnection_weblogic_jdbc_wrapper_XAConnection_oracle_jdbc_driver_LogicalConnection-XMLJDBC_Data_Source-1-3, [email protected]] 

如果我使用數據源,我越來越cst.getObject(6)爲空,但如果使用普通JDBC連接我收到的對象。請建議如何解決此問題

得到這個異常「錯誤:get_item_uda_data:ORA-02089:COMMIT不從過程下級會話異常允許」

+0

數據源和驅動程序是否使用相同的驅動程序(和版本)?是一個瘦,另一個OCI,也許? (只是猜測...) –

+0

我在Weblogic服務器中使用此驅動程序類名稱:oracle.jdbc.xa.client.OracleXADataSource並嘗試從數據源獲取連接。所有DML/DDL查詢和過程都正常工作,但沒有與此cst.registerOutParameter(6,Types.ARRAY,typeTableName);集合作爲輸出參數 – user3428736

+0

我收到錯誤:get_item_uda_data:ORA-02089:COMMIT不允許在下級會話異常 – user3428736

回答

0

你的問題很可能與程序「 myProc「嘗試在啓用自動提交的活動JTA事務中調用」提交「。

在這種情況下,在JDBC上下文中不會有問題,因爲它可能不會在您的環境中自動提交。

如果我的假設是正確的,你只需要刪除你的「myProc」中的「提交」。另一種選擇是調用JTA事務之外的過程(只需用「TransactionAttribute.NOT_SUPPORTED」註釋bean)。

+0

我添加了conn.setAutoCommit(false)使事務提交爲false – user3428736

+0

我剛剛搜索了此範圍之外的問題,我認爲僅僅禁用自動提交是不夠的。結帳這個其他問題/答案我剛剛在_the_stack_中找到:https://stackoverflow.com/questions/29117201/error-with-jpa-transaction-when-calling-a-stored-procedure –