2016-04-29 6 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

ためLXXのおかげで、将来は必要とされ、動作しますか?結果を待つために 'scala.concurrent.Await'を使ってみましたか(これはブロックしていますが、これが理由であるかどうかを知るためだけです)? – Ixx

答えて

3

これはおそらく、あなたのプログラムが将来終了する前に終了し、先端

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)