我目前正在玩 Play 2.0 (Scala)。我必须承认这很有趣。我有一个与数据库操作异常有关的问题。
假设我有Car作为域类,并且我对其中一个字段有完整性约束,比如说模型,因此在数据库中我不能有两 (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而不是Exception,以便我可以对可能出现的问题进行细粒度控制,然后为我的用户提供更简洁的反馈,例如(在浏览器或移动设备上)?
这是处理与数据库相关的操作和异常的最佳方法,还是每个人都使用的最佳实践?
提前致谢,