Откат перевода в MySQL, если исключение приходит в Scala. Я использую Scala с Play Framework и MySQL в качестве бэкэнда
Я использую Scala и MySQL. Я хочу применить откат в моем коде, если возникнет какое-либо исключение, как я могу решить эту проблему. запрос выбора дает исключение, поэтому я хочу откат вставки команды.
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)
}
}
}
1 ответ
Решение
Я думаю, что в этом случае простой способ отключить параметр автоматической фиксации. Затем вы можете выполнить несколько запросов в одной и той же транзакции, но вы должны вручную установить коммит и откат (нам не нужно окончательно блокировать, потому что 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
}