как получить только причину из исключения Java

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

Поэтому я хочу получить только «Недопустимое имя объекта« tty »».

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


person agarwal_achhnera    schedule 18.06.2011    source источник


Ответы (2)


Я не вижу ничего очевидного в 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());
}

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

person Jon Skeet    schedule 18.06.2011

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

System.out.println(e.getMessage());
System.out.println(e.getMessage().substring(end));
затем выдает следующий вывод

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

person agarwal_achhnera    schedule 18.06.2011