2016-04-29 2 views
1

Я пытаюсь поймать ошибку SQL в Slick 3.x. В приведенном ниже коде ничего не печатается, но если отслеживается при отладке, он отлично работает (он печатает неудачу). Что случилось с этим кодом?Ловля исключения в Slick 3.x

object TestSlick extends App { 

    val db = Database.forConfig("dbconfig") 
    val sql = "update table_does_not_exist set zzz=1 where ccc=2" 
    val q = sqlu"#$sql" 

    db.run(q.asTry).map {result => 
     result match { 
       case Success(r) => println(r) 
       case Failure(e) => { 
        println(s"SQL Error, ${e.getMessage}") 
        println("command:" + sql) 
        throw e 
       } 
      } 
     } 

} 
+2

Возможно, ваша программа завершается перед будущими отделками? Вы пытались использовать 'scala.concurrent.Await' для ожидания результата (это блокирует, но просто для того, чтобы знать, является ли это причиной)? – Ixx

ответ

3

Это работает, будущий необходимо, благодаря LXX для наконечника

val future = db.run(q.asTry).map {result => 
     result match { 
     case Success(r) => println(r) 
     case Failure(e) => { 
      println(s"SQL Error, ${e.getMessage}") 
      println("command:" + sql) 
      throw e 
     } 
    } 
    } 

    Await.result(future, Duration.Inf)