2013-03-15 72 views
1

可以说我的代码大致类似于这样的东西:(使用oracle 10G jdbc)。交易是否会在这种特定的情况下进行?Oracle JDBC自动提交

public void someMethod(){ 
    try { 
    OracleConnection connection = getConnectionFromPool(); 
    connection.setAutoCommit(false); 

    // Do some transaction here - complete transaction, no errors occurred 

    ... 

    //Throw my own exception here 
    throw new Exception("Custom Exception"); 


    } catch (Exception e} 
    { 
     ... 
    } 
    finally { 
     connection.setAutoCommit(true); 
    } 
    } 
+4

不,你必须提交()事务如果没有错误,否则回滚。 – 2013-03-15 07:50:50

+0

当你尝试时会发生什么? – 2013-03-15 07:54:02

+1

@Sudhanshu:不是根据JDBC JavaDocs(请参阅我的答案)。 – 2013-03-15 08:16:29

回答

5

According to the JavaDocs,它应该承诺:

注:如果此方法在事务期间调用和自动提交模式被改变,交易被提交。如果调用setAutoCommit并且自动提交模式未更改,则该调用为空操作。

:如果依靠这一点,就意味着你要靠司机遵守这一要求 - 这是我不会做(我绝不会依靠一些隐含happing)

如果您想确保您的交易已完成,请致电commit()

0

号要么删除connection.setAutoCommit(false);

finally { 
     connection.commit(); 
    } 
+0

这不是文档所说的。 – 2013-03-15 08:15:57