setAutoCommit(true) 是否提交过去的执行?
Does setAutoCommit(true) commits past executions?
public void batchUpdate() throws SQLException {
Statement stmt = null;
try {
this.connection.setAutoCommit(false);
stmt = this.connection.createStatement();
stmt.addBatch("INSERT INTO COFFEES VALUES('Amaretto_decaf', 49, 10.99, 0, 0)");
stmt.addBatch("INSERT INTO COFFEES " +"VALUES('Hazelnut_decaf', 49, 10.99, 0, 0)");
int [] updateCounts = stmt.executeBatch();
this.connection.commit();
} catch(BatchUpdateException b) {
JDBCTutorialUtilities.printBatchUpdateException(b);
} catch(SQLException ex) {
JDBCTutorialUtilities.printSQLException(ex);
} finally {
if (stmt != null) { stmt.close(); }
this.connection.setAutoCommit(true);
}
}
问题:
将调用 connection.setAutoCommit(true) 再次提交已经提交的语句(通过方法 connection.commit()
),或者它只是恢复您不必调用的默认状态方法提交自己?
关闭连接不调用connection.setAutoCommit(true)
是自动调用方法还是下次打开还是connection.setAutoCommit(false)
?
根据API
1) 如果在事务中调用了setAutocommit,改变了自动提交模式,则事务被提交。
2) 如果close方法被调用并且有一个活跃的事务,结果是实现定义的。
未定义其他行为
- click!
- 这是标准正确的。在不提交的情况下关闭时,它没有提交。
已提交的语句不再提交。
这取决于你的连接源:一个连接池可能会给你一个autoCommit=false的连接,当你在那个状态下释放它时,一个新的连接会以默认值打开。
It is strongly recommended that an application explicitly commits or rolls back an active transaction prior to calling the close method. If the close method is called and there is an active transaction, the results are implementation-defined.
http://docs.oracle.com/javase/7/docs/api/java/sql/Connection.html#close%28%29
public void batchUpdate() throws SQLException {
Statement stmt = null;
try {
this.connection.setAutoCommit(false);
stmt = this.connection.createStatement();
stmt.addBatch("INSERT INTO COFFEES VALUES('Amaretto_decaf', 49, 10.99, 0, 0)");
stmt.addBatch("INSERT INTO COFFEES " +"VALUES('Hazelnut_decaf', 49, 10.99, 0, 0)");
int [] updateCounts = stmt.executeBatch();
this.connection.commit();
} catch(BatchUpdateException b) {
JDBCTutorialUtilities.printBatchUpdateException(b);
} catch(SQLException ex) {
JDBCTutorialUtilities.printSQLException(ex);
} finally {
if (stmt != null) { stmt.close(); }
this.connection.setAutoCommit(true);
}
}
问题:
将调用 connection.setAutoCommit(true) 再次提交已经提交的语句(通过方法
connection.commit()
),或者它只是恢复您不必调用的默认状态方法提交自己?关闭连接不调用
connection.setAutoCommit(true)
是自动调用方法还是下次打开还是connection.setAutoCommit(false)
?
根据API
1) 如果在事务中调用了setAutocommit,改变了自动提交模式,则事务被提交。
2) 如果close方法被调用并且有一个活跃的事务,结果是实现定义的。
未定义其他行为
- click!
- 这是标准正确的。在不提交的情况下关闭时,它没有提交。
已提交的语句不再提交。
这取决于你的连接源:一个连接池可能会给你一个autoCommit=false的连接,当你在那个状态下释放它时,一个新的连接会以默认值打开。
It is strongly recommended that an application explicitly commits or rolls back an active transaction prior to calling the close method. If the close method is called and there is an active transaction, the results are implementation-defined. http://docs.oracle.com/javase/7/docs/api/java/sql/Connection.html#close%28%29