2011-07-01 74 views
0

我正在做一個小型的數據庫程序。管理Java中的異常

Connection connection = DriverManager.getConnection(..., ..., ...); 

String createTable= "CREATE TABLE Employee ..."; 

try 
{ 
    Statement stmt = connection.createStatement(); 
    stmt.executeUpdate(createTable); 
    stmt.close(); 
    connection.close(); 
} 
catch(Exception Ex) 
{ 
    System.out.println("Erreur : " + Ex.toString()); 
} 

當你運行程序一切都將被罰款,但第二次,你會得到這個異常:

重複表名稱:員工

那麼好吧,我知道如何管理異常,但是如何管理每個可能的異常。如:

IF異常是重複錯誤THEN顯示自定義重複消息。

IF這是一個重複的主鍵THEN顯示另一個錯誤消息等。

謝謝。

+1

不是真的與你的問題,但你應該在「最後」塊執行你的「親密」的行動。 –

回答

2

你必須解析例外方法的字符串來獲取實際的SQL異常的「子」:

try { 
    // ... 
} catch (SQLException e) { 
    if (e.getMessage().toLowerString().contains("duplicate table name")) { 
    // handle duplicate table name problem 
    } else if (/* ... */) { 
    // ... 
    } 
} 
4

如果你想處理特定的異常,你需要多個catch語句。

try { 
    // some code that may throw an exception 
} 
catch (DuplicateKeyException e) { 
    // handle a duplicate key exception 
} 
catch (DuplicateTableException e) { 
    // handle a duplicate table exception - note this probably isn't the correct exception, you'll need to look up what is actually thrown 
} 
catch (Exception e) { 
    // handle all other exceptions in a non-specific way 
} 
0

如果你使用Spring JDBC庫,它會做一些例外轉換對你來說,你會得到(未經檢查)的例外,如DuplicateKeyException,TypeMismatchDataAccessException等,你可以單獨捕捉。

0

您還可以根據SQLException的錯誤代碼定義特定的行爲,爲您的sql-exception排序正確的錯誤處理。但要小心:錯誤代碼是特定於實現的,這意味着如果來自另一個dbms,則JavaDB的一個錯誤代碼不具有相同的含義。

看到 SQLException.getErrorCode()的JAVA API