2013-03-26 50 views
0

我是新的MySQL用戶,試圖編寫通過Java操作數據庫的程序。MySQL和Java--在插入表格時拋出異常

命名users具有以下有無表屬性| USERNAME | EMAIL | ROLE |,其中USERNAMEPRIMARY KEY和屬性的其餘均爲NOT NULL

可以說我做INSERT INTO users,因爲主鍵約束USERNAME MySQL應該會拋出錯誤。這個錯誤將如何拋出,以及如何在JAVA內捕獲它?我是否需要編寫用於拋出錯誤的存儲過程或INSERT INTO聲明也具有此功能?

+0

你爲什麼不先嚐試按照有關這個主題的許多教程之一,並提出一個問題,當你遇到你解決不了具體問題?作爲提示,我會使用'PreparedStatement'而不是'Statement'。 – jlordo 2013-03-26 19:54:30

+2

我Google'的MySQL從java'插入和結果的第一頁上我找到了一個好事先準備好的聲明例如[這裏](http://alvinalexander.com/java/java-mysql-insert-example-preparedstatement)。下行:異常處理非常糟糕。體面的異常處理的第一個命中是[here](http://zetcode.com/db/mysqljava/)。在這兩者之間,你會發現它。最後,MySQL會在適當的時候拋出;你不必做任何特別的事情。 – 2013-03-26 20:12:20

回答

1

如果主鍵被違反的SQLException將用含有所違反的約束的名稱的消息被拋出。您的異常處理可以是這個樣子:

try { 
    //do the insert 
} catch (SQLException e) { 
    if(e.getMessage().contains("MY_CONSTRAINT_NAME")) { 
     //duplicate key 
    } else { 
     //some other error 
    } 
} 

另一種方法是檢查SQLException.getSQLState()SQLException.getErrorCode()

我會推薦使用Spring JDBC,它會照顧SQLException translation,並且通常會減少需要編寫的JDBC代碼的數量。