как получить только причину из исключения Java - PullRequest
0 голосов
/ 18 июня 2011

когда я подключаюсь к базе данных и выполняю запрос, то, если возникает какое-либо исключение, я хочу получить только причину исключения, а не полное сообщение, чтобы в моем журнале я мог регистрировать, например, только причину исключения. Ниже приведено одно исключение путем применения getMessage () к объекту исключения в блоке catch
[Microsoft] [Драйвер ODBC SQL Server] [SQL Server] Недопустимое имя объекта 'tty'.

Итак, я хочу получить только "Неверное имя объекта 'tty'".

Исключение произойдет только из-за метода executeUpdate (). таким образом, исключение может быть связано с базой данных или sqlquery, а не только с недопустимым именем объекта 'tty'.

Ответы [ 2 ]

2 голосов
/ 18 июня 2011

Я не вижу ничего очевидного в SQLException, но могу придумать два варианта:

  • Удалить все в квадратных скобках, возможно, с помощью регулярного выражения.
  • Есливы всегда используете один и тот же драйвер, просто удалите ведущую предсказуемую ведущую подстроку

Пример кода для второго варианта:

private static final String MESSAGE_PREFIX =
    "[Microsoft][ODBC SQL Server Driver][SQL Server]";

...

String message = exception.getMessage();
if (message.startsWith(MESSAGE_PREFIX))
{
    message = message.substring(MESSAGE_PREFIX.length());
}

Это, вероятно, будет значительно проще, чем первыйвариант, но, очевидно, довольно хрупкий перед лицом изменений драйвера.Однако я не удивлюсь, если увидим, что формат сообщений для разных драйверов изменился ...

0 голосов
/ 18 июня 2011

, как предложил @Jon Skeet, я думаю, что лучше использовать первый параметр для регулярного выражения и применить следующий код в блоке catch
Pattern p = Pattern.compile ("\ [. * \]");
Matcher m = p.matcher (e.getMessage ());
int end = 0;
в то время как (m.find ()) {
конец = m.end ();
System.out.println (m.start () + "" + m.end ());
}

System.out.println (e.getMessage ());
System.out.println (. E.getMessage () подстрока (конец));
тогда это дает следующий вывод

0 47
[Microsoft] [Драйвер ODBC SQL Server] [SQL Server] Недопустимое имя объекта 'tty'.
Неверное имя объекта 'tty'.

...