【发布时间】:2012-07-15 17:34:20
【问题描述】:
我目前正在玩 Play 2.0 (Scala)。我必须承认这很有趣。我有一个与数据库操作异常有关的问题。
假设我有 Car 作为域类,并且我对其中一个字段有完整性约束,比如说 model 以便在数据库中我可以没有两 (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 以便我对可能出现的问题进行细粒度控制,然后提供更简洁的提要 -例如(在浏览器或移动设备上)返回给我的用户?
这是处理与数据库相关的操作和异常的最佳方式,还是每个人都使用的最佳实践?
提前致谢,
【问题讨论】:
标签: playframework playframework-2.0 scala-2.8 anorm