2011-07-01 3 views
0

Je fais un petit programme de base de données.Gérer les exceptions en 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()); 
} 

Lorsque vous exécutez le tout programme va être très bien, mais la deuxième fois que vous obtiendrez cette exception:

nom de la table en double: Employé

bien Ok je sais comment gérer les exceptions, mais comment gérer toutes les exceptions possibles. Comme:

IF l'Exception est une erreur Duplicattion THEN afficher un message Dupliquer personnalisé.

IF c'est une clé primaire dupliquée THEN afficher un autre message d'erreur et ainsi de suite.

Merci.

+1

Pas vraiment lié à votre question, mais vous devez effectuer vos actions « fermer » dans un bloc « enfin ». –

Répondre

2

Vous devez analyser la chaîne de méthode exceptions pour obtenir le « sous-type » de l'exception SQL réelle:

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

Vous avez besoin de plusieurs instructions catch si vous souhaitez gérer des exceptions spécifiques.

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

Si vous utilisez la bibliothèque Spring JDBC, il fera une traduction d'exception pour vous, vous obtiendrez des exceptions (non contrôlées) telles que DuplicateKeyException, TypeMismatchDataAccessException, etc., que vous pouvez prendre séparément.

0

Vous pouvez également trier le bon traitement des erreurs pour votre exception sql en définissant un comportement spécifique en fonction du code d'erreur de SQLException. Mais attention: les codes d'erreur sont spécifiques à l'implémentation, ce qui signifie qu'un code d'erreur par exemple JavaDB n'a pas le même sens s'il provient d'un autre dbms.

voir SQLException.getErrorCode() dans l'API JAVA

Questions connexes