我目前在Play!ing玩Play 2.0(Scala)。我必須承認這很有趣。我有一個問題,雖然有關數據庫操作異常。如何管理Play中與數據庫相關的異常! 2.0/Scala使用Anorm
比方說,我有汽車爲域類和我在球場上的一個完整性約束,讓我們假設模式,這樣在DB我不能有兩個(2)行具有同一型號名稱:
case class Car(id: Pk[Long], name: String, model: String)
我試圖插入這樣一個數據庫中的記錄:
def create(car: Car): Option[Long] = {
DB.withConnection { implicit connection =>
try {
SQL("insert into cars (name, model) values ({name},{model}").on("name" -> car.name, "model" -> car.model).executeInsert()
} catch {
case e: Exception => {
Logger.debug(e.getMessage())
None
}
}
}
如果我不捕獲異常,像前面的代碼,那麼當我把這個方法從我與具有在數據庫中已經存在的價值模式控制器,我有以下異常拋出:
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry 'Enzo' for key 'model'
有沒有辦法趕上MySQLIntegrityConstraintViolationException,而不是異常讓我有一個細(例如,在瀏覽器中或在移動設備上)對可能出錯的內容進行嚴格控制,然後向我的用戶提供更簡潔的反饋?
這是處理與數據庫相關的操作和異常的最佳方式,還是有任何人人都使用的最佳做法?
在此先感謝,
我試圖抓住MySQLIntegrityConstraintViolationException例外,像這樣的,但它無法正常工作。可能是因爲MySQLIntegrityConstraintViolationException不是案例類,因此不適合進行模式匹配。 – kaffein 2012-07-17 09:57:36
@kaffein非案例類可以很好地匹配,你不能解構它們,例如你不能'NonCaseClass(e)=>',因爲它們默認情況下沒有unapply方法。在我的情況下,問題是一個不正確的導入。我導入了'com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException'而不是'com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException'(注意''jdbc4'包)。 – 2016-05-30 16:16:46