1

次のようなコードがあるとしましょう: (Oracle 10G 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

2 に答える 2

5

JavaDocsによると、コミットする必要があります。

注: このメソッドがトランザクション中に呼び出され、自動コミット モードが変更された場合、トランザクションはコミットされます。setAutoCommit が呼び出され、自動コミット モードが変更されていない場合、呼び出しはノーオペレーションです。

BUT : これに依存している場合は、この要件に準拠するためにドライバーに依存していることを意味します。これは私がやらないことです (暗黙のうちに起こっていることに依存することは決してありません)。

トランザクションがコミットされたことを確認するには、 を呼び出しますcommit()

于 2013-03-15T08:15:45.557 に答える
0

いいえ。削除するconnection.setAutoCommit(false);か、

finally {
      connection.commit();
    }
于 2013-03-15T07:56:34.943 に答える