我正在使用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();
答案 0 :(得分:29)
创建连接时,它处于自动提交模式。这意味着 将每个单独的SQL语句视为事务并且是 执行后立即自动提交。 (更多 精确,默认情况下是SQL语句提交的时间 完成,而不是在执行时。所有声明都完成了 已检索到其结果集和更新计数。几乎 但是,所有情况下,声明都已完成,因此已经提交, 它被执行后立即。)
另一件事是 - 你省略了连接创建的详细信息,所以我只是猜测 - 如果你正在使用某些框架,或者从数据源或连接池获取连接,autocommit
可能会被转换这些框架/池/数据源的off
- 解决方案永远不会信任默认设置; - )