2013-03-15 69 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