当oracle过程中出现异常时,回滚在java中不起作用
我有以下问题: 当列表的所有元素都正确时,在Java works中回滚,并且在断点时没有记录保存到数据库中。 当列表中的一个元素不正确时,执行时输入过程的异常,并在断点时将所有元素(异常前)记录到数据库中。 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
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语句?这将导致自动、无提示的提交。你的伪代码没有足够的细节让我们来诊断问题。请注意,我不是在鼓吹你发布完整的代码;这对我们来说可能太多了。咨询。这甚至可以帮助你解决自己的问题。(旁注:这是“断点”,不是“制动点”。)