0

SQLException が発生するたびにクエリを再実行したいのですが、いつか例外が発生します

SQLException occurred... com.mysql.jdbc.exceptions.jdbc4.
MySQLTransactionRollbackExceptionDeadlock
found when trying to get lock; try restarting transaction

私のコードは以下です。データベースはMySQL InnoDBです..提案してください...

  String sqlquery = "UPDATE tbl_users SET abill=?" 
                                 + " WHERE uid=? AND sms='2'"; 

     PreparedStatement preStatement=null;
      try{
         con.setAutoCommit(false);
        preStatement=con.prepareStatement(sqlquery);
        preStatement.setString(1,billpush);
        preStatement.setString(2,uid);
        preStatement.executeUpdate();
        con.commit();
       }

     catch(SQLException sE)
     {
       log.error("SQLException occurred... "+sE);
         con.rollback();
     }
      finally {
if (preStatement != null) {
preStatement.close();
    }        
            }
4

2 に答える 2

1
UPDATE tbl_users SET abill=billpush, asms ='2' WHERE uid='uid' AND sms='2' and asms<>'2'

これにより、最後に asms<>'2' のように条件を追加するだけでデッドロックが回避されます。
これで問題が解決することを願っています。

于 2013-05-15T12:52:20.053 に答える