【发布时间】:2013-05-27 01:25:21
【问题描述】:
我在这里以理论为基础,我想确保我的所有基础都被涵盖。
我已经阅读了很多关于 InnoDB 和 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);
【问题讨论】:
标签: java mysql innodb deadlock database-deadlocks