我得到错误:
SQL State: 25001
Error Code: 20000
Message: Cannot close a connection while a transaction is still active.
我之所以理解这一点,是因为当事务未提交或回滚时,我正在关闭数据库连接。
这应该很容易修复。但是,我使用的是连接池。因此,我真的不确定这个连接在哪里没有被提交。我只是想优雅地关闭连接池中的每个连接。
总是在关闭事务之前调用commit是否安全?
if (!connection.isClosed())
{
connection.commit();
connection.close();
}
解决此问题的另一种方法是仔细检查每个数据库操作,以确保连接已提交。这是一条安全的捷径吗?
记录并回滚。
永远不要盲目承诺。
连接池应该回滚与活动事务一起返回的任何连接。这里的想法是,当返回连接时,事务仍然处于活动状态的原因是借用线程出现了某种问题,没有正常完成其进程。