2016-04-29 20 views
1

我在捕捉Slick 3.x中的SQL錯誤。下面的代碼不會打印任何內容,但是如果在調試下進行跟蹤,它可以正常工作(它會打印失敗)。這段代碼有什麼問題?在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)