autoCommit var 在关闭时是否在 c3p0 中重置?

Does autoCommit var resets in c3p0 on close?

我正在使用 DB2。我为它创建了 ConnectionPool。一些需要在 "aumoCommit = false" 模式下执行的查询。

Connection con = ConnectionPool.getConnection // wrapper
con.setAutoCommit(false);
PreparedStatment ps = con.prepareStatement(// query... );
ps.setString(...);
ps.executeUpdate();
con.commit();
ps.close();
con.close();
con.setAutoCommit(true); // should be here ?

问题是:我应该在最后添加 con.setAutoCommit(true) 行还是 C3P0 重置每个关闭(返回到池)连接的状态?

编辑:经过一些评论后,我补充说我的问题是:con.setAutoCommit(false) 调用通常应该在那里还是 c3P0 重置此连接的状态以及下一次此连接将处于 [=默认情况下 18=](false)?

c3p0 始终根据 JDBC 规范释放 autoCommit 设置为 true 的连接。

总的来说,c3p0 努力确保您在普通客户端会话期间所做的任何事情都不会对未来的客户端会话产生任何影响。一旦将连接签回池中,c3p0 将完全重置并恢复其状态。

您可以定义 "sticks" 跨客户端会话的连接状态的唯一位置是在 ConnectionCustomizer 的 onAcquire(...) 方法中,该方法在任何客户端会话启动之前调用。但这仅适用于 JDBC 规范未定义其值的连接属性。由于规范要求 autoCommit 是新连接的 true,并且 JDBC 透明连接池需要池化,并且新连接在应用程序语义中无法区分,新签出的连接总是 autoCommit 设置为真。