2013-12-22 1 views
2

Я использую scala и mysql. Я хочу применить откат в моем коде, если возникает какое-то исключение, как я могу решить эту проблему. select query дает исключение, поэтому я хочу вернуть команду вставки назад.ретрансляция отката в mysql, если исключение приходит в scala. Я использую scala с платформой воспроизведения и mysql как backend

def demoRollback(user_id:String)={ 
try{ 
    DB.withConnection{ implicit c=> 
    val roll=SQL("start transaction").execute() 
    val result=SQL("insert into demo value('50','jjjjj')").executeInsert() 
    println("the select query..........="+result) 
    val user=SQL("select user_id from demo where user_id=1") 
    val result2=user().map(row=> 
    row[String]("user_id")).toList 


    result 
    } 
} 
catch{ 
    case e :Exception =>{ 
    DB.withConnection{implicit c=> 
    val back=SQL("rollback").execute 
    } 
    println(e) 
    } 
} 

}

ответ

2

Я думаю, что в этом случае простой способ отключить опцию автокоммит. Затем вы можете выполнить несколько запросов в одной транзакции, но вы должны вручную установить фиксацию и откат (нам не нужно, наконец, блокировать, потому что для нас закрыто withConnection).

val log = Logger(controllers.Application.getClass) 

    def demoRollback(user_id: String) = { 
    var r: Option[Long] = None 
    DB.withConnection { 
     implicit c => 
     c.setAutoCommit(false) 
     try { 
      val result = SQL("insert into demo value('50','jjjjj')").executeInsert() 
      log.debug(s"the select query..........= $result") 
      val user = SQL("select user_id from demo where user_id=1") 
      val result2 = user().map(row => row[String]("user_id")).toList 
      c.commit() 
      r = result 
     } catch { 
      case e: Exception => c.rollback() 
     } 
    } 
    r 
    } 

 Смежные вопросы

  • Нет связанных вопросов^_^