我今天遇到了MySQLTransactionRollbackException
异常,错误消息为Deadlock found when trying to get lock; try restarting transaction
。我分析了代码,发现在同一个事务中有很多update / insert语句,最后提交了事务。我发现之间有很多PreparedStatement.executeQuery()
个电话。 PreparedStatement.executeQuery()
来电是否获得锁定?可能是造成僵局的另一个可能原因是什么?我试过谷歌搜索但没有运气。我看了this和this,但没有得到答案。
对某些标准文档的任何引用都会有所帮助。我正在使用MySQL(InnoDB)。
答案 0 :(得分:0)
连接到数据库并使用" rollback"命令直到没有交易。然后检查你的代码你应该尝试阻止这样的东西:
try
{
// sql queries
// transaction commit command, commit() method on connection
}
catch(Exception) //SQLException etc.
{
//transaction rollback command, rollback() method on connection
}
另外我建议将setAutoCommit设为false,因为。 Check this和this
禁用自动提交模式后,在显式调用方法提交之前,不会提交任何SQL语句。在上一次调用方法提交之后执行的所有语句都包含在当前事务中,并作为一个单元一起提交。