2013-03-15 2 views
1

다음과 같은 코드가 있습니다. (oracle 10G jdbc 사용). 이 특정 시나리오에서 트랜잭션이 커밋됩니까?Oracle JDBC Auto-Commit

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

아니요, 오류가없는 경우 트랜잭션을 커밋()해야합니다. 그렇지 않으면 롤백해야합니다. –

+0

시도하면 어떻게됩니까? –

+1

@Sudhanshu : JDBC JavaDocs에 따르지 않습니다 (내 답변 참조). –

답변

5

According to the JavaDocs, 그것은 커밋해야 제거 :

참고 :이 메소드가 트랜잭션 (transaction)의 도중에 전화를하면 자동 위탁 모드가 변경되면 트랜잭션이 커밋됩니다. setAutoCommit가 불려가, 자동 위탁 모드가 변경되지 않는 경우, 호출은 조작 없음입니다.

하지만 :이에 의존하는 경우, 당신이이 요구 사항을 준수하기 위해 드라이버에 의존 의미 - 내가하지 무언가가

을 (내가 뭔가가 묵시적으로 happing에 의존하지 않을 것)

거래가 완결되도록하려면 commit()으로 전화하십시오.

0

번호 중 하나를 connection.setAutoCommit(false); 또는

finally { 
     connection.commit(); 
    } 
+0

문서에 나와 있지 않은 내용입니다. –

관련 문제