如果在EJB中抛出异常,如何处理游标

时间:2016-10-26 12:27:02

标签: java oracle ejb

我有一个callableStatment,执行后我得到以下错误

    try{
callableStatement.executeQuery()
}
    catch (Throwable t) {
                throw new Exception(t);

            } 
            finally {
                closeResultSet(rs);
                closeCallableStatement(callableStatement);
                closeConnection(dbConnection);

            }
javax.ejb.EJBTransactionRolledbackException: ORA-30926: unable to get a stable set of rows in the source tables

过了一段时间后,我得到了“Too man open cursors”的数据库错误

我知道该程序因重复而抛出错误,我想知道为什么游标没有关闭,因为它似乎最终阻塞不是我需要的东西以及关闭它们的正确方法

2 个答案:

答案 0 :(得分:0)

executeQuery()的返回类型是您尚未指定的ResultSet。尝试将其作为

ResultSet rst = callableStatement.executeQuery();

希望它有所帮助。 :)

答案 1 :(得分:0)

我认为您正在执行合并查询,并且返回的行ID超过1个。这就是这种例外的原因。此外,当返回第一个重复行时,会抛出异常。在查询甚至执行之前,您正试图关闭它。这应该是光标未正确关闭的原因。尝试在查询中添加一个不同的关键字,以避免重复。例如:MERGE INTO table_1一个USING(SELECT distinct ta.ROWID row_id FROM table_1 a,table_2 b,table_3 c WHERE)src ON(a.ROWID = src.row_id)当匹配时;由于涉及回滚,它会在系统异常。并且不会回滚应用程序异常。