从WLS - 数据源连接对象Types.ARRAY不工作

问题描述:

我使用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

你的问题很可能与程序“ 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 –