当oracle过程中出现异常时,回滚在java中不起作用

当oracle过程中出现异常时,回滚在java中不起作用,java,oracle,exception,commit,procedure,Java,Oracle,Exception,Commit,Procedure,我有以下问题: 当列表的所有元素都正确时,在Java works中回滚,并且在断点时没有记录保存到数据库中。 当列表中的一个元素不正确时,执行时输入过程的异常,并在断点时将所有元素(异常前)记录到数据库中。 Java中的回滚不起作用 有什么问题吗 示例伪代码: 程序: PROCEDURE UserProcedure(InOb IN INOB, OutOb OUT OUTOB) IS BEGIN FOR i IN InO

我有以下问题:

当列表的所有元素都正确时,在Java works中回滚,并且在断点时没有记录保存到数据库中。 当列表中的一个元素不正确时,执行时输入过程的异常,并在断点时将所有元素(异常前)记录到数据库中。 Java中的回滚不起作用

有什么问题吗

示例伪代码:

程序:

 PROCEDURE UserProcedure(InOb IN INOB,
                               OutOb OUT OUTOB) IS
  BEGIN

    FOR i IN InOb.list.First .. InOb.list.Last
    LOOP

      BEGIN

      working...

        IF condition THEN

          working...

        ELSE

          working...

        END IF;

      EXCEPTION
        WHEN OTHERS THEN

          preparing OutOb - set status code to error   
      END;

    END LOOP;

  END;
Java方法:

public Response getResponse(Request request) {
    try {
        //Connect to database...
        //Setting autocommit false...
        //Mapping...
        //Preparing statement...
        //Executing statement...

        //BREAKPOINT

        //Collecting data from response...
        //check response status code and commit or rollback;

    } catch (Exception e) {
        //loging error...
    } finally {
        //closing connection
    }
    returning response;
}
JAVA版本:
1.5.0.22

Oracle版本:
10

谢谢你抽出时间


解决了!谢谢你的帮助。异常块使用DDL语句调用其他过程-这就是问题所在。

您的Java“制动点”在提交或回滚之前,所以为什么更改会回滚-您的过程中是否有回滚,或者您的伪代码是否不代表您的真实代码?Java异常处理程序中似乎没有显式回滚,但同样很难区分伪代码。可能有其他东西重用了相同的连接,这就是提交事务,但这与您描述的并不匹配。伪代码与原始代码相同。在oracle过程中,并没有提交或回滚之类的事情。两个场景,一个代码-不同的结果。我不明白问题出在哪里,我仍然不清楚从哪里可以看到来自Java的提交数据;或者你是从另一个客户那里看到的?请记住,关闭连接默认情况下会提交,即使关闭自动提交(我想…),所以您仍然需要在Java异常处理程序中显式回滚,和/或在关闭连接之前。当执行在断点处停止时,我会看到数据库中的更改。在错误情况下,我无法回滚。甚至我在执行语句后也放置了rollback。您的
异常
块是否包含任何DDL语句?这将导致自动、无提示的提交。你的伪代码没有足够的细节让我们来诊断问题。请注意,我不是在鼓吹你发布完整的代码;这对我们来说可能太多了。咨询。这甚至可以帮助你解决自己的问题。(旁注:这是“断点”,不是“制动点”。)