26

我正在使用 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();
4

1 回答 1

36

来自Oracle JDBC 文档

创建连接时,它处于自动提交模式。这意味着每个单独的 SQL 语句都被视为一个事务,并在执行后立即自动提交。(更准确地说,默认情况下,SQL 语句在完成时提交,而不是在执行时提交。一条语句在检索到所有结果集和更新计数时完成。然而,在几乎所有情况下,语句在执行后立即完成,因此被提交。)

另一件事是-您省略了连接创建细节,所以我只是在猜测-如果您正在使用某些框架,或者从数据源或连接池获取连接,则autocommit可能会off被那些框架/池/数据源打开-解决方案是永远不要相信默认设置;-)

于 2012-06-13T19:58:07.300 回答