我正在使用 DB2。我为它创建了连接池。一些查询需要在“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 ?
Run Code Online (Sandbox Code Playgroud)
问题是:我应该在最后添加 con.setAutoCommit(true) 行还是 C3P0 重置每个关闭(返回到池)连接的状态?
编辑:在几条评论之后,我补充说我的问题是:一般情况下应该调用 con.setAutoCommit(false) 还是 c3P0 重置此连接的状态,并且下一次此连接将默认处于 con.setAutoCommit(false) 状态?
根据 JDBC 规范, c3p0 始终释放autoCommit设置为 的连接。true
一般来说,c3p0 努力确保您在普通客户端会话期间所做的任何操作都不会对未来的客户端会话产生任何影响。一旦连接重新签入池中,c3p0 就会完全重置并恢复其状态。
您可以定义跨客户端会话“粘连”的连接状态的唯一位置是在 ConnectionCustomizer 的onAcquire(...)方法中,该方法在启动任何客户端会话之前调用。但这仅适用于 JDBC 规范未定义其值的连接属性。由于autoCommit规范要求true新连接,并且 JDBC 透明连接池要求池连接和新连接在应用程序语义中无法区分,因此新检出的连接始终设置为autoCommittrue。
| 归档时间: |
|
| 查看次数: |
1348 次 |
| 最近记录: |