JDBC连接默认autoCommit行为

时间:2012-06-13 18:42:20

标签: oracle jdbc autocommit

我正在使用JDBC连接到Oracle。我测试了connection.setAutoCommit(false) vs connection.setAutoCommit(true),结果与预期一致。

虽然默认连接应该像autoCommit(true)一样工作[如果我错了就纠正我],但是在调用connection.commit()之前没有插入任何记录。有关默认行为的任何建议吗?

String insert = "INSERT INTO MONITOR (number, name,value) VALUES (?,?,?)";

conn = connection; //connection  details avoided
preparedStmtInsert = conn.prepareStatement(insert);
preparedStmtInsert.execute();

conn.commit();

1 个答案:

答案 0 :(得分:29)

来自Oracle JDBC documentation

  

创建连接时,它处于自动提交模式。这意味着   将每个单独的SQL语句视为事务并且是   执行后立即自动提交。 (更多   精确,默认情况下是SQL语句提交的时间   完成,而不是在执行时。所有声明都完成了   已检索到其结果集和更新计数。几乎   但是,所有情况下,声明都已完成,因此已经提交,   它被执行后立即。)

另一件事是 - 你省略了连接创建的详细信息,所以我只是猜测 - 如果你正在使用某些框架,或者从数据源或连接池获取连接,autocommit可能会被转换这些框架/池/数据源的off - 解决方案永远不会信任默认设置; - )