현재 Play 2.0 (스칼라)에서 플레이 중입니다. 나는 그것이 많은 재미임을 인정해야한다. 비록 데이터베이스 작업 예외와 관련된 질문이입니다.Play에서 DB 관련 예외를 관리하는 방법! 2.0/Anorm을 사용하는 스칼라
의 내가 도메인 클래스로 자동차이 나는 분야 중 하나에 무결성 제약 조건을 가지고,의는 모델 그래서 그 DB에 내가 두 (2) 행을 갖는 가질 수 없습니다 가정 해 봅시다 가정 해 봅시다 나는이를 호출 할 때 다음, 나는 이전 코드에서와 같이 예외를 catch하지 않는 경우
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
}
}
}
: 같은 모델명 :
case class Car(id: Pk[Long], name: String, model: String)
나는이 같은 DB에서 레코드를 삽입하는 것을 시도하고있다 방법 모델이 이미 데이터베이스에 존재하는 값을 갖는 내 컨트롤러에서 나는 다음과 같은 예외가 발생했습니다 :
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry 'Enzo' for key 'model'
그래서이를 미세을 가지고 예외을
MySQLIntegrityConstraintViolationException을 잡는 대신
수있는 방법이 있나요 무엇이 잘못 될 수 있는지에 대한 세분 된 제어를 수행 한 다음 예를 들어 (브라우저 또는 모바일 장치에서) 내 사용자에게 좀 더 간결한 피드백을 제공합니까? DB 관련 작업과 예외를 처리하는 가장 좋은 방법입니까 아니면 모두가 사용하는 모범 사례가 있습니까? 사전에
덕분에,
나는이 같은 MySQLIntegrityConstraintViolationException 예외를 잡으려고 시도했지만 작동하지 않습니다 : 여기 받는다는의 pom.xml에서 MySQL의 의존성 부분이다. 아마도 MySQLIntegrityConstraintViolationException은 사례 클래스가 아니기 때문에 패턴 일치에 적합하지 않기 때문일 수 있습니다. – kaffein
@kaffein non-case 클래스는 잘 일치 할 수 있습니다. 예를 들어 그들을 분해 할 수 없습니다. 'case NonCaseClass (e) =>'는 기본값으로 적용되지 않는 메소드가 없으므로 수행 할 수 없습니다. 제 경우에는 문제가 잘못 가져 왔습니다. com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException 대신'com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException'을 임포트했습니다 ('jdbc4' 패키지 참고). –