Управление исключениями в Java - PullRequest
0 голосов
/ 01 июля 2011

Я делаю небольшую программу базы данных.

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 отображение другого сообщения об ошибке и т. Д.

Спасибо.

Ответы [ 4 ]

4 голосов
/ 01 июля 2011

Вам нужно несколько операторов 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
}
2 голосов
/ 01 июля 2011

Вам потребуется проанализировать строку метода исключений, чтобы получить «подтип» фактического исключения SQL:

 try {
   // ...
 } catch (SQLException e) {
  if (e.getMessage().toLowerString().contains("duplicate table name")) {
   // handle duplicate table name problem
  } else if ( /* ... */ ) {
   // ...
  }
 }
0 голосов
/ 01 июля 2011

Вы также можете отсортировать правильную обработку ошибок для вашего sql-исключения, определив конкретное поведение в зависимости от кода ошибки SQLException.Но будьте осторожны: коды ошибок зависят от реализации, это означает, что один код ошибки, например, JavaDB, не имеет такого же значения, если он исходит от другой базы данных.

см. SQLException.getErrorCode () в API JAVA

0 голосов
/ 01 июля 2011

Если вы используете библиотеку Spring JDBC, она сделает для вас перевод исключений, поэтому вы получите (непроверенные) исключения, такие как DuplicateKeyException, TypeMismatchDataAccessException и т. Д., Которые вы можете отловить отдельно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...