如何从Java异常中获取唯一原因

| 当我连接到数据库并执行查询时,如果发生任何异常,那么我只想获取异常原因而不是完整的消息,因此例如,在我的日志中,我只能记录异常原因。下面的异常是通过对catch块中的异常对象应用getMessage() [Microsoft] [ODBC SQL Server驱动程序] [SQL Server]无效的对象名称\'tty \'。 所以我只想获取\“无效的对象名称\'tty \'\”。 仅由于executeUpdate()方法会发生该异常。因此,异常可能与数据库或sqlquery有关,而不仅仅是对象名称\'tty \'无效。     
已邀请:
        我在ѭ0中看不到任何明显的东西,但是我可以想到两个选择: 删除所有用方括号括起来的正则表达式。 如果您始终使用相同的驱动程序,则只需删除前导可预测的前导子字符串 第二个选项的示例代码:
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());
}
这可能比第一种选择容易得多,但是面对驱动程序更改,显然要脆弱得多。无论如何,我不会为不同的驱动程序更改消息格式而感到惊讶...     
        正如@Jon Skeet所建议的那样,我认为最好将第一个选项用于正则表达式并在catch块中应用以下代码 模式p = Pattern.compile(\“ \\ [。* \\] \”); 匹配器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 \'。     

要回复问题请先登录注册