gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 08:39:27 24 4
gpt4 key购买 nike

我正在使用 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 重置此连接的状态,下一次此连接将在 con.setAutoCommit(false) 中默认情况下?

最佳答案

根据 JDBC 规范,c3p0 总是释放 autoCommit 设置为 true 的连接。

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

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

关于java - autoCommit var 在关闭时是否在 c3p0 中重置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41394246/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com