【问题标题】:Oracle JDBC Auto-CommitOracle JDBC 自动提交
【发布时间】:2013-03-15 07:50:05
【问题描述】:

假设我的代码大致类似于以下内容:(使用 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);
    }
    }

【问题讨论】:

  • 不,如果没有错误,您必须提交()事务,否则回滚。
  • 当你尝试时会发生什么?
  • @Sudhanshu:不符合 JDBC JavaDocs(见我的回答)。

标签: java sql oracle jdbc


【解决方案1】:

According to the JavaDocs,它应该提交:

注意:如果在事务期间调用此方法并且更改了自动提交模式,则提交事务。如果调用了 setAutoCommit 并且未更改自动提交模式,则该调用是无操作的。

但是:如果你依赖这个,这意味着你依赖驱动程序来遵守这个要求 - 这是我不会做的事情(我永远不会依赖隐含的事情)

如果您想确保您的事务已提交,请致电commit()

【讨论】:

    【解决方案2】:

    没有。删除 connection.setAutoCommit(false);

    finally {
          connection.commit();
        }
    

    【讨论】:

    • 文档不是这么说的。
    猜你喜欢
    • 1970-01-01
    • 2013-04-24
    • 2014-04-06
    • 2017-11-05
    • 2020-12-22
    • 1970-01-01
    • 1970-01-01
    • 2013-06-27
    • 2011-07-12
    相关资源
    最近更新 更多