2014-12-20 10 views
7

Wie kann ich fangen diese Ausnahme:Fang doppelten Eintrag Ausnahme

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

Es wäre besser, das Problem zu lösen, die diese Ausnahme verursacht – sol4me

+0

es ist kein Problem, aber mit einer Web-Anwendung kann ein Benutzer HTTP-Request-Parameter ändern und ich möchte sicher sein, dass alles funktioniert, also möchte ich diese Schicht Sicherheit hinzufügen. – Youssef

+0

Aber wie Sie aus dem StackTrace sehen können, verletzen Sie beim Einfügen eine Einschränkung und es ist besser, zuerst die Daten zu validieren, bevor Sie sie an die Datenbank senden. Sie können natürlich Ausnahme fangen, wenn Sie wirklich wollen, aber ich würde eine sauberere Lösung bevorzugen – sol4me

Antwort

12

ich Frühling so lösen wir es von org.springframework.dao.DataIntegrityViolationException

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

fangen SQLIntegrityConstraintViolationException, wenn Sie Java verwenden 1.6+

z.B.

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

oder

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

'Unreachable catch block für SQLIntegrityConstraintViolationException. Diese Ausnahme wird niemals aus dem try statement body' – Youssef

+0

@Youssef ausgelöst. Wie lautet die Version Ihres mysql-connector-java? Und was ist das SQL, das Sie versuchen zu aktualisieren? – auntyellow

+0

Catching SQLException ist erforderlich. Dann können Sie feststellen, ob es sich um eine SQLIntegrityConstraintViolationException handelt. Beachten Sie, dass MySQLIntegrityConstraintViolationException ein Typ von SQLIntegrityConstraintViolationException ist. – auntyellow

0

Der folgende Code funktioniert für mich:

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

} 
0

I Frühling verwenden. So fangen org.springframework.dao.DuplicateKeyException

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