我怎麼能抓住這個異常:捕捉重複條目異常
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException:
Duplicate entry '22-85' for key 'ID_CONTACT'
我怎麼能抓住這個異常:捕捉重複條目異常
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException:
Duplicate entry '22-85' for key 'ID_CONTACT'
我用彈簧,所以我們通過org.springframework.dao.DataIntegrityViolationException
try {
ao_history_repository.save(new AoHistory(..));
}
catch (DataIntegrityViolationException e) {
System.out.println("history already exist");
}
抓SQLIntegrityConstraintViolationException,如果你使用的是Java 1.6+
例如
try {
ps.executeUpdate("INSERT INTO ...");
} catch (SQLIntegrityConstraintViolationException e) {
// Duplicate entry
} catch (SQLException e) {
// Other SQL Exception
}
或
try {
ps.executeUpdate("INSERT INTO ...");
} catch (SQLException e) {
if (e instanceof SQLIntegrityConstraintViolationException) {
// Duplicate entry
} else {
// Other SQL Exception
}
}
'無法到達SQLIntegrityConstraintViolationException的catch塊。這個異常永遠不會從try語句body' – Youssef
@Youssef中拋出,你的mysql-connector-java的版本是什麼?什麼是你嘗試更新的SQL? – auntyellow
需要捕獲SQLException。然後,你可以發現,如果它是一個SQLIntegrityConstraintViolationException。需要注意的是MySQLIntegrityConstraintViolationException是一種SQLIntegrityConstraintViolationException的。 – auntyellow
下面的代碼工作對我來說解決這個問題:
try {
requete.executeUpdate();
} catch (final ConstraintViolationException e) {
}
我使用Spring。 所以趕org.springframework.dao.DuplicateKeyException
try{
...
} catch (DuplicateKeyException dke) {
...
}
這將是更好的解決,這是造成這個異常 – sol4me
這不是一個問題,但如果一個Web應用程序的用戶可以更改HTTP請求參數的問題,我想確保每件事情都有效,所以我想添加這個圖層安全。 – Youssef
但是,從堆棧跟蹤中可以看出,在插入期間,您違反了約束條件,最好在將數據發送到數據庫之前先驗證數據。你可以明顯地趕上異常,如果你真的想,但我希望有一個清潔的解決方案 – sol4me