2014-12-20 4 views
7

Jak mogę złapać ten wyjątek:Złap duplikat wpisu Wyjątek

com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: 
             Duplicate entry '22-85' for key 'ID_CONTACT' 
+2

Byłoby lepiej, aby rozwiązać problem, który jest przyczyną tego wyjątku – sol4me

+0

to nie jest problem, ale z aplikacji internetowej użytkownik może zmienić parametry żądania HTTP i chcę upewnij się, że wszystko działa, więc chcę dodać to zabezpieczenie warstwy. – Youssef

+0

Ale jak widać na stosie, że podczas wstawiania naruszasz ograniczenie i lepiej jest najpierw sprawdzić dane przed wysłaniem ich do bazy danych. Oczywiście możesz złapać wyjątek, jeśli naprawdę chcesz, ale wolałbym czyściejsze rozwiązanie. – sol4me

Odpowiedz

12

używam sprężynę więc go rozwiązać przez org.springframework.dao.DataIntegrityViolationException

try { 
     ao_history_repository.save(new AoHistory(..)); 
    } 
    catch (DataIntegrityViolationException e) { 
     System.out.println("history already exist"); 
    } 
7

połów SQLIntegrityConstraintViolationException, jeśli używasz Java 1.6 +

np

try { 
    ps.executeUpdate("INSERT INTO ..."); 
} catch (SQLIntegrityConstraintViolationException e) { 
    // Duplicate entry 
} catch (SQLException e) { 
    // Other SQL Exception 
} 

lub

try { 
    ps.executeUpdate("INSERT INTO ..."); 
} catch (SQLException e) { 
    if (e instanceof SQLIntegrityConstraintViolationException) { 
     // Duplicate entry 
    } else { 
     // Other SQL Exception 
    } 
} 
+0

'Nieosiągalny blok catch dla SQLIntegrityConstraintViolationException. Ten wyjątek nigdy nie jest wyrzucany z ciała instrukcji try ' – Youssef

+0

@Youssef, jaka jest wersja twojego mysql-connector-java? A jaki jest kod SQL, który próbujesz zaktualizować? – auntyellow

+0

Wymagany jest catching SQLException. Następnie można wykryć, czy jest to wyjątek SQLIntegrityConstraintViolationException. Zwróć uwagę, że wyjątek MySQLIntegrityConstraintViolationException jest typem wyjątku SQLIntegrityConstraintViolationException. – auntyellow

0

Poniższy kod działa dla mnie:

try { 
    requete.executeUpdate(); 
} catch (final ConstraintViolationException e) { 

} 
0

używam Wiosna. więc złapać org.springframework.dao.DuplicateKeyException

try{ 
    ... 
} catch (DuplicateKeyException dke) { 
    ... 
}