我使用的是WLS 12.1.3,oracle是10.2.0,我使用weblogic数据源来获取连接 这是代码,
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.CallableStatement_oracle_jdbc_driver_OracleCallableStatementWrapper@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, oracle.jdbc.driver.LogicalConnection@34505466]
如果我使用datasource,我将cst.getObject(6)作为null,但是如果使用普通的jdbc连接,我将获得该对象。请建议如何解决此问题
获取此异常“错误:get_item_uda_data:ORA-02089:来自过程的从属会话异常中不允许COMMIT”
答案 0 :(得分:0)
您的问题很可能与程序有关" myProc"试图打电话"提交"在启用了自动提交的活动JTA事务中。
在JDBC上下文中,在这种情况下不会出现问题,因为它可能不会在您的环境中自动提交。
如果我的假设是正确的,你只需要删除" commit"在你的" myProc"内。另一个选择是在JTA事务之外调用该过程(只需用" TransactionAttribute.NOT_SUPPORTED"来注释你的bean)。