我在这里以理论为基础,我想确保我的所有基础都被覆盖。
我已经阅读了很多关于 InnoDB with Java 的内容,以及无论您运行什么查询,死锁是如何发生的。尽管我对理论和最佳实践非常了解,但我对如何在发生死锁时实现重新发布事务的全部捕获机制几乎一无所知。
是否有特定的例外需要注意?异常仅在我调用后引发connection.commit()
还是在我执行后立即发生PreparedStatement
?事情是否应该在一个循环中运行,并限制循环运行的次数?
我基本上只需要一个简单的 Java 代码示例来说明这件事通常是如何处理的。由于我不确定因素在哪里,例如,我是重新实例化PreparedStatement
对象还是先关闭它们等等,所以这一切都非常令人困惑。ResultSet
对象也是如此。
编辑:我可能应该提到我正在处理事务,将自动提交设置为 0 等。
编辑 2:我是否使用这个伪代码走在正确的轨道上?我没有任何线索
do
{
deadlock = false
try
{
// auto commit = 0
// select query
// update query
// delete query
// commit transaction
}
catch (DeadLockSpecificException e)
{
deadlock = true
}
finally
{
// close resources? statement.close(), resultset.close() etc?
// or do I reuse them somehow and close them after the do/while loop?
// this stuff confuses me a lot too
}
}
while (deadlock == true);