2010-05-19 893 views
3

我工作的一個Web應用程序,並在一個點,我認爲是用戶唯一的形式,一個如何正確捕獲MySQLIntegrityConstraintViolationException?

 MySQLIntegrityConstraintViolationException Duplicate entry -'username' 
for key 'PRIMARY'

我深知這是爲什麼被拋出,因爲我試圖進入一個重複使用相同的主鍵進入數據庫。我不希望對此有任何評論,因爲這可能是多餘的。

我真正要問的是我應該如何處理這個問題。我試圖解決這個例外,但顯然我缺乏經驗已經趕上了我。

我將不勝感激您的幫助。

是否有更好的方法來檢查數據庫中的重複條目?

例如,我應該在檢查重複成員時執行什麼操作,並且僅對數據庫檢查匹配的用戶名和密碼?

感謝

回答

1

通常,如果可以避免拋出異常,因爲它們是控制程序工作流程的重要機制。你只能用它們來追蹤錯誤和不規則的活動/情況。所有這些意味着如果你發現了一個異常,你可以做的唯一事情就是記錄更多的異常,將異常封裝在另一個異常中,並最終觸發一些後退程序邏輯。

不要期望捕捉異常,只需檢查用戶名是否正確。我想如果你正在開發某種註冊表格,你會做這個檢查很多...普通用戶有一些流行的詞語,如果你實現它的例外,你會很經常... ...

不幸的是,如果你的數據庫非常大,主鍵就是許多複雜的對象,你不能保留內存中的一些元素來執行重複條目的檢查。

1

是的,尤其是在這種情況下,最好是檢查其他用戶是否使用相同的用戶名存在之前試圖插入用戶。

+0

假設您沒有內存中的所有用戶名,在嘗試插入記錄之前檢查id是否存在會更好嗎?您將針對每個插入操作進行數據庫查找,而不是偶爾發生異常。 – 2013-01-07 17:43:38

+0

您通常在該字段上有索引,因此查找速度非常快。 – Bozho 2013-01-07 20:10:02

+1

但它仍然需要在網絡上往返。這比例外要慢幾個數量級。 – 2013-01-08 20:58:25

0

我也遇到同樣的問題,請嘗試使用catch (MySQLIntegrityConstraintViolationException sql)處理異常。 但是不要忘記有2種類型的MySQLIntegrityConstraintViolationException一個用於JDBC,另一個用於JDBC4。 所以我建議在兩個單獨的try catch循環中捕獲它們。

相關問題