更新DB中的表时发生MySQLTransactionRollbackException

时间:2014-05-28 10:42:27

标签: mysql sql database innodb

我今天遇到了MySQLTransactionRollbackException异常,错误消息为Deadlock found when trying to get lock; try restarting transaction。我分析了代码,发现在同一个事务中有很多update / insert语句,最后提交了事务。我发现之间有很多PreparedStatement.executeQuery()个电话。 PreparedStatement.executeQuery()来电是否获得锁定?可能是造成僵局的另一个可能原因是什么?我试过谷歌搜索但没有运气。我看了thisthis,但没有得到答案。

对某些标准文档的任何引用都会有所帮助。我正在使用MySQL(InnoDB)。

1 个答案:

答案 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 thisthis

  

禁用自动提交模式后,在显式调用方法提交之前,不会提交任何SQL语句。在上一次调用方法提交之后执行的所有语句都包含在当前事务中,并作为一个单元一起提交。